Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Widok
Дата сообщения: 17.06.2008 17:16
Inno Setup часть 4 (часть 1, часть 2, часть 3)

Это мощное средство для создания установочных пакетов (дистрибутивов) программ. Поддерживается шифрование, установка пароля, различные задачи по завершении установки. Можно создавать свои страницы, используя Inno Setup Form Designer.
По сравнению с NSIS (основной конкурент на бесплатной основе) проще в настройке, имеет более понятную структуру скрипта.

Последний релиз: 5.2.3 [10.03.2008]
История версий | скачать | все сборки || Скачать Preprocessor | все сборки

Русификатор от NightW0lf для версии 5.2.0
Скачать | зеркало

Русская справка к версиям 5.0.x, автор перевода BagIra
Скачать | зеркало || cкачать в .chm формате

Руководство по расширенным возможностям Inno Setup 5 (не для чайников) от Kindly
Версия 5.1 скачать || версия 5 скачать|зеркало || версия 4 скачать|зеркало || версия 3 скачать|зеркало

Inno Setup Extensions Knowledge Base (содержит ответы на многие вопросы)
Новая версия (Web-интерфейс) || Старая chm-версия скачать | зеркало

Коллекция скриптов и Сборник вопросов, собранных из этой и предыдущих частей топика.

Corona Skin & Check System Requirements от Victor_Dobrov
Скачать | зеркало | скриншот | описание | старая версия || InnoSetup Upgrade || Слайд-шоу
Обложка для Inno Setup. Сделает инсталлятор более симпатичным и добавляет расширения: Проверка минимальных требований. Расширенный прогрессбар. Расчёт времени до завершения распаковки. Список дисков. Слайдшоу или AVI-файл в фоновом окне. Компактный режим установки. Деинсталляция неучтённых файлов. Экран справки/скриншота. Медиаплеер и многое другое...

Примечание: Если необходимо использовать метод проверки внешнего файла через сумму MD5 (который описан в 5 версии руководства от Kindly) для запуска инсталлятора, то понадобится калькулятор хеша MD5, калькулятор сумм MD5, SHA-256, CRC32. Если требуется узнать, какие ключи реестра меняет та или иная программа, используйте RegShot. Чтобы растянуть фоновый рисунок на весь экран, в версии Inno Setup 5.1.10 и выше используйте этот код.

Дополнительные утилиты для Inno Setup

ISTool

Мощная надстройка для Inno Setup, при помощи которой создавать свои инсталляторы становится очень просто.

Последний релиз: 5.2.1 [15.10.2007]
Скачать | зеркало || Русификатор | зеркало
GameScript Generator

Простой мастер создания скрипта для установки одной или нескольких игр. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации.

Inno Script Generator

Прежнее название ScriptMaker. Удобная оболочка для облегчения написания скриптов установки для Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.

Последний релиз: 1.0.3.1 [23.03.2008]
Скачать | обновить (нужен QuickStartPack 5.2.3)
Inno Setup Unpacker

Распаковщик установок, сделанных с помощью Inno Setup. При распаковке извлекаются ресурсы и скрипт установки (немного усечённый). Возможно подключение к Total Commander или FAR с помощью MultiArc плагинов.
Поддерживает распаковку инсталляторов, сделанных с помощью Inno Setup начиная с версии 3.0.0-beta по 5.2.3

Последний релиз: 0.20 [23.05.2008] New
Скачать | Расширенная версия (с поддержкой русского языка)

Примечание для всех участников

Объёмные скрипты или части кода заключайте в тег more, чтобы ваш вопрос в сообщении не затерялся среди множества строк прилагаемого скрипта.
Автор: boss911
Дата сообщения: 17.06.2008 18:07
Genri

Цитата:
Тогда вместо этого, используй параметр RunOnceId:
[UninstallRun]
Filename: "{sys}\calc.exe"; RunOnceId: "OnlyOneRunCalc"

Первый раз слышу про параметр 'RunOnceId'.
Теперь вроде все работает как мне надо, спасибо.
Автор: Genri
Дата сообщения: 18.06.2008 00:33
boss911 -- Есть многое на свете, друг Горацио...
Особенно в хелпе

Автор: Victor_Dobrov
Дата сообщения: 18.06.2008 03:14
Corona Skin & Check System Requirements (350 Кб) - обновление расширения для Inno Setup.

Фоновое изображение (ключ ShowOnBackground) может быть в форматах bmp, jpeg, gif, png.
Ключ AviOnProgress добавит анимацию на прогрессбар. AVI-файл разрешением 300х96 можно взять здесь.
Если скринсэвер или Слайдшоу работают, то правый клик мышью на фоновом окне откроет окно настроек.
Добавлен ключ препроцессора: TimeLimit, запрещающий установку после заданной даты.
wpPreparing: изменено оформление, добавлен поясняющий текст.
wpSelectProgramGroup: папка установки при CreateAppDir=false не выбирается.
wpSelectDir: щелчок по названию таблицы локальных дисков обновляет список.
Зашифрованный пароль теперь не включается в код несколько раз.
Серийник может быть с дефисами, тогда поле ввода разделится на группы, например в строке 123-45-6789 их будет 3.
Можно указать свой размер шрифта для групп, для DefaultUserInfoSerial=123|16 размер шрифта 16, серийник 123.
Если UserSerial в реестре неправильный, то поле редактирования серийного номера очищается.
Исправлены недоработки теста системы, значения минимальных требований выводятся в подсказках. Можно проверять наличие файла: NeedRegKey:= '{sys}\msvcp80.dll';
Если [Setup]: AppVerName не указан, в скрипт пишется AppVerName = AppName+VersionInfoVersion.
В [Setup]: AppPublisher копируется значение ключа VersionInfoCopyright (если указано).
Если [Messages]: BeveledLabel не указан, копирайт берётся из [Setup]: AppPublisher или [CustomMessages]: Author.
По клику на копирайте открывается адрес, заданный в [Setup]: AppPublisherURL.
При сборке в файлы локализации скина записывается текущая дата (значит на CD-ROMе их держать нельзя).
Функцию CheckSystem можно использовать с флагом Check также, как CheckCPU и CheckMemorySize.
Функция GetFolderByCSIDL возвращает путь к заданной папке (константы в ShlObj.h). Пример: Source: MyFile; DestDir: {code:GetFolderByCSIDL|28} скопируется в C:\Documents and Settings\Владелец\Local Settings\Application Data.
Для оформления теперь доступны значки из системных файлов (процедура DrawIcon).
При компиляции пароль и серийный номер можно увидеть в начале лога сборки.
Если скрыть фон (щелчок по логотипу вверху-справа), то Слайдшоу закроется, что ускоряет распаковку.
Фоновое окно можно включить, если щелкнуть по логотипу вверху-справа.
Автор: geranik
Дата сообщения: 18.06.2008 09:29
Авира и спайвар доктор видят в ImgGdiPlus.dll небольшой троян. Наверно так и задумано при таких кодах.
Автор: Victor_Dobrov
Дата сообщения: 18.06.2008 13:33
geranik, Я взял готовую библиотеку, вирусов там нет, остальные вопросы к автору SBRunScr.
Автор: EagleSH
Дата сообщения: 18.06.2008 20:57
Господа, вопрос по x64 платформе:

если в коде стоит:

ArchitecturesAllowed=x86 x64
ArchitecturesInstallIn64BitMode=x64

то на 64-й платформе реестр пишется сюда: HKEY_LOCAL_MACHINE\SOFTWARE, а должен сюда: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node

если убрать те строки, то всё нормально. в чём трабл?

просто у меня стоят строки:

Filename: {src}\vcredist\vcredist_x86.exe; Check: not Is64BitInstallMode; Flags: waituntilterminated
Filename: {src}\vcredist\vcredist_x64.exe; Check: Is64BitInstallMode; Flags: waituntilterminated

тоесть при 32-й винде запускается vcredist_x86.exe, а при 64-й запускается vcredist_x64.exe
Автор: Genri
Дата сообщения: 18.06.2008 22:32
EagleSH -- на х64 платформе, реестр состоит из 2-х частей (32 и 64 разрядных), многие ключи которых имеют одинаковые названия. Запускаемый по умолчанию редактор реестра, отображает обе части. Причем, 32-х разрядная часть, 64-х битным редактором отображается в узле ...\Wow6432Node. (32-х битный редактор можно запустить из %systemroot%\syswow64\regedit. Он естественно, покажет только 32-х битный раздел)
Инсталлятор по умолчанию использует режим 32 бит. Таким образом, при отсутствии явного указания инсталлятору работать в режиме 64 бит, запускается vcredist_x86.exe и записи в реестре отображаются в 32-х разрядной части (...\Wow6432Node). При явном указании запускаться в 64-х разрядном режиме, запускается vcredist_x64.exe и записи попадают в 64-х битный раздел.

Так что все правильно. Разве что, вместо Is64BitInstallMode, наверно надо использовать IsWin64.

Все вышесказанное ИМХО. Практики создания инсталляторов под х64 не имею. Только теория.
Автор: SergeyLS
Дата сообщения: 19.06.2008 07:10
Приветствую!
Мне нужно сделать много-язычный инсталлятор, в нем будут несколько рукотворных страничек, но я не очень хорошо разбираюсь в програмировании и у меня получилось неколько коряво.
Вот, что я сделал:

[Setup]
AppName=Test
AppVerName=Test 1.0.1
CreateAppDir=false
Uninstallable=false
OutputBaseFilename=testsetup
ShowUndisplayableLanguages=true
WindowVisible=true
WizardImageFile=pics\wizard.bmp
WizardSmallImageFile=pics\wizard-small.bmp
SetupIconFile=pics\Ico3.ico
WindowResizable=true

[Languages]
Name: en; MessagesFile: compiler:Default.isl
Name: de; MessagesFile: compiler:\Languages\German.isl
Name: ru; MessagesFile: compiler:\Languages\Russian.isl

[CustomMessages]
en.AboutButtonCaption=Credits
de.AboutButtonCaption=Impressum
ru.AboutButtonCaption=Спасибо

[Files]
Source: pics\WizModernBigImage.bmp; Flags: dontcopy
Source: pics\WizModernSmallImage.bmp; Flags: dontcopy
Source: pics\wizard.bmp; Flags: dontcopy
Source: pics\wizard-small.bmp; Flags: dontcopy
Source: support\bass.dll; Flags: dontcopy
Source: support\isxbb.dll; Flags: dontcopy
Source: support\vistaharp.ogg; Flags: dontcopy

[more]

Код:
const
BASS_SAMPLE_LOOP = 4;

type
HSTREAM = DWORD;
function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure CreateTheWizardPages;
var
Page: TWizardPage;
BitmapImage: TBitmapImage;
BitmapFileName: String;
begin
if ExpandConstant('{language}') = 'en' then
begin
Page := CreateCustomPage(wpWelcome, 'Test page', 'Continue test');
BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));
BitmapImage := TBitmapImage.Create(Page);
BitmapImage.AutoSize := True;
BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
BitmapImage.Parent := Page.Surface;
end
else
if ExpandConstant('{language}') = 'de' then
begin
Page := CreateCustomPage(wpWelcome, 'Test-Seite', ' Weiter testen');
BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));
BitmapImage := TBitmapImage.Create(Page);
BitmapImage.AutoSize := True;
BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
BitmapImage.Parent := Page.Surface;
end
else
if ExpandConstant('{language}') = 'ru' then
begin
Page := CreateCustomPage(wpWelcome, 'Тестовая страница', 'Продолжить тест');
BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));
BitmapImage := TBitmapImage.Create(Page);
BitmapImage.AutoSize := True;
BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
BitmapImage.Parent := Page.Surface;
end
end;

procedure AboutButtonOnClick(Sender: TObject);
begin
if ExpandConstant('{language}') = 'en' then
begin
MsgBox('Author name thanks Comrades:', mbInformation, mb_Ok);
end
else
if ExpandConstant('{language}') = 'de' then
begin
MsgBox('Autor Name dank Kameraden:', mbInformation, mb_Ok)
end
else
if ExpandConstant('{language}') = 'ru' then
begin
MsgBox('Автор поименно благодарит камрадов:', mbInformation, mb_Ok)
end
end;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.test.ru/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
var
NmPlay: string;
i: Integer;
s:string;
AboutButton, CancelButton: TButton;
URLLabel: TNewStaticText;
BackgroundBitmapImage: TBitmapImage;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('vistaharp.ogg');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
NmPlay:=ExpandConstant('{tmp}\music.ogg');
i:=BASS_StreamCreateFile(FALSE, PChar(NmPlay), 0, 0, 4);
if i <> 0 then
begin
begin
BASS_ChannelPlay(i, True);
begin
ExtractTemporaryFile('WizModernBigImage.bmp');
CreateTheWizardPages;
CancelButton := WizardForm.CancelButton;

AboutButton := TButton.Create(WizardForm);
AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
AboutButton.Top := CancelButton.Top;
AboutButton.Width := CancelButton.Width;
AboutButton.Height := CancelButton.Height;
AboutButton.Caption :=ExpandConstant('{cm:AboutButtonCaption}');
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := WizardForm;

URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption := 'www.odin.worldofgothic.ru';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlack;
URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2;
URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(12);

s:=ExpandConstant('{tmp}')+'\WizModernBigImage.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.AutoSize := True;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;
WizardForm.CancelButton.BringToFront;
end
end
end
end
end;

procedure DeInitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;

Автор: SotM
Дата сообщения: 19.06.2008 07:57
SergeyLS
Что-то код у тебя какой-то уж совсем "сложный".
Можно смело убрать такие проверки как
Код: if ExpandConstant('{language}') = 'de' then
Автор: 999Kay666
Дата сообщения: 19.06.2008 09:38
1.Как в Inno Setup обездвижить страници инсталлятора (запретить перетаскивание окон).

2.Или хотябы, как избавиться от заголовка окна(верхней строки, где написано "Установка"(Setup)).

Что, неужели никто не знает!
Автор: Genri
Дата сообщения: 19.06.2008 11:41
999Kay666
1. Можно.
2. Можно.

Но зачем?
Автор: EagleSH
Дата сообщения: 19.06.2008 12:36
Genri
ну со структурой знаком, просто инересен факт почему при добавке строк не правильно пишет реестр.


Цитата:
записи в реестре отображаются в 32-х разрядной части (...\Wow6432Node).


тоесть тут как раз и не отображаются, а должны.
Автор: Genri
Дата сообщения: 19.06.2008 13:30
EagleSH -- почему "должны"? Я думаю, что в ...\Wow6432Node должны только в случае, если инсталлируется 32-х битный vcredist_x86.exe, который запускается при отсутствии ArchitecturesInstallIn64BitMode=x64. А при наличии этой строки, запустится vcredist_x64.exe, который является 64-х битным и значит пропишет в основной раздел, а не в ...\Wow6432Node

И кстати: ArchitecturesInstallIn64BitMode не имеет отношения к операционной системе (32 или 64). Это разрядность архитектуры (процессора). Т.е.:

Цитата:
Filename: {src}\vcredist\vcredist_x86.exe; Check: not Is64BitInstallMode; Flags: waituntilterminated
Filename: {src}\vcredist\vcredist_x64.exe; Check: Is64BitInstallMode; Flags: waituntilterminated

тоесть при 32-й винде запускается vcredist_x86.exe, а при 64-й запускается vcredist_x64.exe
-- неверно. На х64 винде и х64 проце запустится либо один, либо другой, в зависимости от режима запуска инсталлятора (ArchitecturesInstallIn64BitMode).
Автор: EagleSH
Дата сообщения: 19.06.2008 14:43
Genri
так, тоды смотри:

можешь сделать пральный скрипт, шоб при 64-й винде писало в Wow6432Node и запускало vcredist_x64.exe, а при 32-й соответственно пишет куда надо и запускает vcredist_x86.exe.
Автор: Genri
Дата сообщения: 19.06.2008 14:51
EagleSH -- а попробуй без всякого инсталлятора просто запустить vcredist_x64.exe на 64 винде и посмотри - пропишет в Wow6432Node или нет. Думаю что нет.

Добавлено:
я ведь правильно понимаю, что речь идет о записях в реестр, которые делает vcredist_x64.exe ? Или речь идет о секции [Registry] ?
Если второе, то убери строку ArchitecturesInstallIn64BitMode=x64 и замени Is64BitInstallMode на IsWin64 (о чем я уже говорил).
Автор: SergeyLS
Дата сообщения: 19.06.2008 15:06
SotM

Цитата:
SergeyLS
Что-то код у тебя какой-то уж совсем "сложный".
Можно смело убрать такие проверки как
Код:if ExpandConstant('{language}') = 'de' then
Они вообще не нужны. Добавить что-нить в этом роде:

Код:[CustomMessages]
en.PageCaption=Test page
en.PageDescription=Continue test
ru.PageCapton=Тестовая страница
ru.PageDescription=Продолжить тест

А в самом коде сделать типа:
Код:
Page := CreateCustomPage(wpWelcome, ExpandConstant( '{cm:PageCaption}' ), ExpandConstant( '{cm:PagePageDescription}' ) );

И всё остальное по аналогии можно сделать.
И вообще, поиск, RFTM, чтение примеров и т.п, очень рулят!


Приветствую!
Большое спасибо, мне помогло, а код не я писал. Просто очень захотелось его переделать, а теперь нашел ФАКИ и Доки, вот - буду изучать.
Всего вам доброго.
С уважением, Сергей.
Автор: EagleSH
Дата сообщения: 19.06.2008 15:09

Цитата:
я ведь правильно понимаю, что речь идет о записях в реестр, которые делает vcredist_x64.exe ? Или речь идет о секции [Registry] ?

речь идёт о записях, которые делает непосредственно ИННО.

тоесть если в коде

ArchitecturesAllowed=x86 x64
ArchitecturesInstallIn64BitMode=x64

эти строки НЕ СТОЯТ, всё работает правильно и ИННО пишет куда нужно содержимое секций Registry, ну а если СТОЯТ, то он пишет ТУПО в HKEY_LOCAL_MACHINE\SOFTWARE, а должен в HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node

вот в чём дело.
Автор: Genri
Дата сообщения: 19.06.2008 15:28
EagleSH

Цитата:
тоесть если в коде

ArchitecturesAllowed=x86 x64
ArchitecturesInstallIn64BitMode=x64

эти строки НЕ СТОЯТ, всё работает правильно
-- т.е. все работает правильно, за исключением того, что запускается vcredist_x86.exe ?

Ну так не ставь эти строки, а проверку запуска пиши так:

Filename: {src}\vcredist\vcredist_x86.exe; Check: not IsWin64; Flags: waituntilterminated
Filename: {src}\vcredist\vcredist_x64.exe; Check: IsWin64; Flags: waituntilterminated

уже третий раз пишу: замени Is64BitInstallMode на IsWin64
Автор: EagleSH
Дата сообщения: 19.06.2008 15:42
Genri
понял, попробую - сообщу о резалте!
Автор: EagleSH
Дата сообщения: 19.06.2008 22:14
Genri
всё отлично пашет. не знаю, чё я таким сложным путём пошёл... спс.
Автор: boss911
Дата сообщения: 19.06.2008 23:15

Код: [Run]
Filename: ResHacker\RESHacker.exe; WorkingDir: {app}; Parameters: -script ResFiles\access.cpl.txt; StatusMsg: Модификация файлов...; Flags: waituntilidle shellexec
Filename: ResHacker\RESHacker.exe; WorkingDir: {app}; Parameters: -script ResFiles\acctres.dll.txt; StatusMsg: Модификация файлов...; Flags: waituntilidle shellexec
Filename: ResHacker\RESHacker.exe; WorkingDir: {app}; Parameters: -script ResFiles\accwiz.exe.txt; StatusMsg: Модификация файлов...; Flags: waituntilidle shellexec
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
и т.д.
Автор: 999Kay666
Дата сообщения: 20.06.2008 00:33

Цитата:
1. Можно.
2. Можно.

Но зачем?


Во-первых нме так удобнее, во-вторых я хочу сделать подобие ИнсталлШиелд, как в игре Сибирь.

А твоё "Можно" - это можно, но не знаю, или знаю, но не скажу!

Убрать строку "установка" у меня получалось, но чисто случайно, поэтому не помню как. А как обездвижить Мастер - понятия не имею.
Автор: mukas
Дата сообщения: 20.06.2008 00:37
привет
Автор: Genri
Дата сообщения: 20.06.2008 01:03
999Kay666 -- "можно", это значит что такая возможность существует. Но прежде чем давать совет применить тот или иной метод, мне бы хотелось понять суть вопроса. Твой ответ ясности не добавил. Лично мне бы не понравилось работать с инсталлятором, окно которого я не могу переместить туда, где мне удобней (напр. на второй монитор).

Так что:
1. [more=Запрет перемещения]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[_Code]
const
SC_MOVE = $F010;
MF_BYCOMMAND = 0;

function GetSystemMenu(Wnd: HWnd; bRevert: boolean): HWnd;
external 'GetSystemMenu@user32.dll stdcall';

function RemoveMenu(hMenu: HWnd; uPosition: Integer; uFlags: Longint): boolean;
external 'RemoveMenu@user32.dll stdcall';

Procedure InitializeWizard();
begin
RemoveMenu(GetSystemMenu(WizardForm.Handle, false), SC_MOVE, MF_BYCOMMAND);
end;
[/more]
2. [more=Скрытие заголовка]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[_Code]
const
GWL_STYLE = (-16);
WS_CAPTION = $C00000;

function GetWindowLong(Wnd: HWnd; Index: Integer): Longint;
external 'GetWindowLongA@user32.dll stdcall';

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint;
external 'SetWindowLongA@user32.dll stdcall';

Procedure InitializeWizard();
begin
SetWindowLong(WizardForm.Handle, GWL_STYLE,
GetWindowLong(WizardForm.Handle, GWL_STYLE) and not WS_CAPTION);
end;
[/more]
...а как и какой из них тебе "удобнее" применять - разбирайся сам. Без удовлетворительного объяснения причин такого требования, я больше ничем помочь не смогу.
Автор: serg_aka_lain
Дата сообщения: 20.06.2008 03:00
mukas

Цитата:
привет


Наверно так

function InitializeSetup(): Boolean;
begin
MsgBox('привет', MbInformation, Mb_Ok);
Result := True;
end;
Автор: SotM
Дата сообщения: 20.06.2008 08:35
serg_aka_lain
Думаешь лучше использовать MsgBox?
Может лучше забабахать картинку в PhotoShope с надписью "Hello world".
Потом можно splash с этой картинкой сделать, а потом еще этакой фоновой музыки добавить... думаю инсталяшка будет занимать максимум мегабайт 10-15.

Автор: Genri
Дата сообщения: 20.06.2008 10:20
boss911 -- можно. Но зачем?
Имена файлов и их кол-во на этапе компиляции известны ? В чем задача? Не прописывать много строк или не пересобирать инсталлятор?
Автор: boss911
Дата сообщения: 20.06.2008 15:13

Цитата:
В чем задача? Не прописывать много строк или не пересобирать инсталлятор?

Ты почти угадал, иногда надо добавить или удалить строку для запуска, а так будет достаточно выкинуть или докинуть *.txt. В этот раз пришлось добавить 20 строк, а для красоты их надо было еще проставить между строк по имени запуска файлов. Уверен, смысл и идею ты понял.

Смотрел help, но нечего подобного не нашел. Скажи, тут без секции код ситуацию не разрешить?
Автор: valeron87
Дата сообщения: 20.06.2008 16:06
boss911
Без секции кода скорее всего не получится, а с ней будет примерно вот так:

Код: [Files]
Source: "Scripts\*.txt"; DestDir: "{app}\ResFiles"; AfterInstall: ApplyScript; Flags: ignoreversion

[Code]
procedure ApplyScript;
var
ErrorCode: integer;
tmp: String;
begin
tmp:=WizardForm.StatusLabel.Caption;
WizardForm.StatusLabel.Caption:='Модификация файла...';
ShellExec('open', ExpandConstant('{app}\ResHacker\RESHacker.exe'), '-script "'+ExpandConstant(CurrentFileName)+'"', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
WizardForm.StatusLabel.Caption:=tmp;
end;

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.