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

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

Автор: Artem_Butenko
Дата сообщения: 09.11.2008 13:11
Victor_Dobrov

Я все с тем же наболевшим вопросом по поводу создания лоадера программ на Inno Setup. Недавно написал [more=скрипт][_Setup]
AppName=MyProgram
AppVerName=MryPogram 1.0
AppPublisher=Artem_Butenko.
AppCopyright=Copyright (C) 2007 Artem_Butenko, Inc
VersionInfoVersion=1.0
VersionInfoCompany=Artem_Butenko Inc.
VersionInfoCopyright=Artem_Butenko Inc.
SetupIconFile=Icon.ico
DirExistsWarning=no
AppendDefaultDirName=no
Uninstallable=no
CreateUninstallRegKey=no
UsePreviousAppDir=yes
AllowNoIcons=no
DefaultDirName={tmp}
DisableDirPage=yes
DisableProgramGroupPage=yes
DisableReadyPage=yes
DisableFinishedPage=yes
OutputBaseFilename=MryPogram 1.0
Compression=lzma/ultra
SolidCompression=yes

;; Файлы включаемые в компиляцию данного инсталляционного пакета
[_Files]
;; Библиотека и рисунок для организации Splash-скрина
Source: "CallNSIS.dll"; DestDir: "{tmp}"; Flags: dontcopy noencryption nocompression
Source: "AdvSplash.dll"; DestDir: "{tmp}"; Flags: dontcopy noencryption nocompression
Source: "Splash.wav"; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: "Splash.bmp"; DestDir: "{tmp}"; Flags: dontcopy noencryption nocompression
;; Библиотека и музыкальный файл (м.б. в формате .xm, .mod, .it)
Source: "BassMod.dll"; DestDir: "{tmp}"; Flags: dontcopy noencryption nocompression
Source: "Sound.xm"; DestDir: "{tmp}"; Flags: dontcopy noencryption nocompression
;; Базовый файл в данном пакете
Source: "MyProgram.ex_"; DestDir: "{src}"; AfterInstall: SetupFBird; Flags: noencryption nocompression
Source: "MyProgram2.ex_"; DestDir: "{src}"; AfterInstall: SetupFBird; Flags: noencryption nocompression

[_Code]
{Константы реализации функции прозрачности окна}
const
TransparentPercent = 0; {Процент прозрачности окна}
{Настройка параиетров функции прозрачности}
WS_EX_LAYERED = $80000;
WS_EX_TRANSPARENT = $20;
LWA_COLORKEY = 1;
LWA_ALPHA = 2;
GWL_EXSTYLE = (-20);

{Включение в инсталлятор функций прозрачности окна}
function SetLayeredWindowAttributes(hwnd: HWND; crKey: TColor; bAlpha: BYTE; dwFlags: DWORD): Boolean;
external 'SetLayeredWindowAttributes@user32.dll stdcall';

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 SetupFBird();
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{src}\MyProgram.ex_'), '', '', SW_SHOWNORMAL,
ewWaitUntilTerminated, ResultCode);
begin
Exec(ExpandConstant('{src}\MyProgram2.ex_'), '', '', SW_SHOWNORMAL,
ewWaitUntilTerminated, ResultCode);
end;
end;

{Необходимые флаги для воспроизведения}
const
BASS_MUSIC_RAMP = 1; {Только для Fast Tracker .xm}
BASS_MUSIC_RAMPS = 2; {Только для Fast Tracker .xm}
BASS_MUSIC_LOOP = 100; {Повторение}
BASS_MUSIC_FT2MOD = 16; {Играть .MOD как FastTracker 2}
BASS_MUSIC_PT1MOD = 32; {Играть .MOD как ProTracker 1}
BASS_MUSIC_SURROUND = 512; {Звучание surround}
BASS_MUSIC_SURROUND2 = 1024; {Звучание surround (режим 2)}

{Определяем процедуры и функции}
{Инициализация библиотеки BassMod.dll}
function BASSMOD_Init(device: Integer; freq, flags: DWORD): Boolean;
external 'BASSMOD_Init@files:BASSMOD.dll stdcall delayload';

{Остановка проигрывания трекерной музыки}
function BASSMOD_MusicStop(): Boolean;
external 'BASSMOD_MusicStop@files:BASSMOD.dll stdcall delayload';

{Загрузка файла для воспроизведения}
function BASSMOD_MusicLoad(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): Boolean;
external 'BASSMOD_MusicLoad@files:BASSMOD.dll stdcall delayload';

{Проигрывание трекерной музыки через библиотеку BassMod.dll}
function BASSMOD_MusicPlay(): Boolean;
external 'BASSMOD_MusicPlay@files:BASSMOD.dll stdcall delayload';

{Выгрузка библиотеки BassMod.dll}
procedure BASSMOD_Free();
external 'BASSMOD_Free@files:BASSMOD.dll stdcall delayload';

{Процедуры и функции организации Splash-заставки}
procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar);
external 'callplug@files:callnsis.dll stdcall';

procedure InitializeWizard;
var
Name1: string;
{Настройка параметров Splash-заставки}
begin
ExtractTemporaryFile('Splash.bmp');
ExtractTemporaryFile('Splash.wav')
ExtractTemporaryFile('AdvSplash.dll')
{1000 - 1 секунда; 3000 - время показа рисунка без эффектов появления и затухания; 2000 - время показа плавного появления рисунка;
1500 - время показа плавного затухания рисунка. При нажатии мышой на рисунок заставка закрывается}
callplug(0,ExpandConstant('{tmp}\AdvSplash.dll'),'show','1000','2000','1500','-1',ExpandConstant('{tmp}\Splash'),'','','','','')
{Настройка параметров проигрывания трекерной музыки}
begin
ExtractTemporaryFile('BassMod.dll');
ExtractTemporaryFile('Sound.xm');
{Здесь инициализируем библиотеку в обычной системе со стандартной аудиокартой}
if not BASSMOD_Init(-1,44100,0)
then
begin
{Выгружаем dll при неудачной инициализации}
MsgBox('BASSMOD не смогла инициализироваться, проигрывание музыки невозможно.', mbError, MB_OK)
BASSMOD_Free;
end else;
Name1:=ExpandConstant('{tmp}\Sound.xm');
{Загружаем и воспроизводим}
if BASSMOD_MusicLoad(FALSE, PChar(Name1), 0, 0, 4 or 512 or 32 or 1) then
BASSMOD_MusicPlay;
{Инициализация функции прозрачности окна в ходе установки}
begin
SetWindowLong(WizardForm.Handle, GWL_EXSTYLE,
GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(WizardForm.Handle, 0,
(255 * TransparentPercent) / 100, LWA_ALPHA);
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
begin
If CurPageID=wpFinished then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;
end;
end;

procedure DeInitializeSetup();
begin
BASSMOD_MusicStop; {Остановка проигрывания}
BASSMOD_Free(); {Выгрузка библиотеки из памяти}
end;[/more], отчасти помогающий реализовать задуманное.
Но при реализации скрипта на практике возникают проблемы такого содержания:
- внешние исполняемые файлы (MyProgram.ex_ и MyProgram2.ex_) почему-то запаковываются в инсталлятор. Хотя компилируются с константами {src};
- файл MyProgram.ex_ выполняется непонятно почему дважды(!), хотя MyProgram2.ex_ срабатывает один раз (как и необходимо);
- если из скрипта убрать процедуру прозрачности окон, то в конце установки на некоторое время появляется пустая форма окна с прогресс-баром. Хотелось бы "побороть" этот трабл более эстетичным образом, нежели назначения абсолютной прозрачности окнам лоадера.
Пожалуйста, подскажите в правильном ли направлении я развиваю этот скрипт, или, что-то можно сделать иначе, более рационально. Во всяком случае буду рад Вашей помощи!

Добавлено:
Совсем забыл, а можно ли убрать отображение окна лоадера (во время исполнения внешнего файла) на панели быстрого запуска?
Автор: mav34
Дата сообщения: 09.11.2008 14:11
htuos

Цитата:
mav34
Цитата:В командной строке нет таких параметров
тебе никто не мешает передавать инсталлятору свои параметры. читаем хелп по ParamCount и ParamStr
Цитата:а дополнительное окно для выбора пути вылезает каждый раз, до выбора компонентов.
страницы можно поменять местами, это уже обсуждалось. соответственно в зависимости от выбранных компонентов можно и надпись изменить для выбора пути


Спасибо, с этим разобрался. Очередной вопрос: как привязать TimeLimit (ограничение на запуск по дате)
Author: Vincenzo
Article created: 10/05/03 19:32:01
Article URL : http://www.vincenzo.net/isxkb/modules.php?name=News&file=article&sid=48

к кнопке Далее на первой странице?

Автор: Victor_Dobrov - реализовал в своём "Corona Skin", но использовать этот вариант в целом я ещё не готов
Автор: Sampron
Дата сообщения: 09.11.2008 14:29
Artem_Butenko

Цитата:
если из скрипта убрать процедуру прозрачности окон, то в конце установки на некоторое время появляется пустая форма окна с прогресс-баром.

Так вынеси форму за пределы экрана.
Автор: Diawer
Дата сообщения: 09.11.2008 15:43
Спрашивал, как сделать выпадающее языковое меню как в Inno Setup в одну строку, где при нажатии стрелочки справа вываливается окно с языками. Вот [more=код………..] он на два языка (просто мне нужно на более 20 языков, а прокрутка в Таске как то не смотрится) может, у кого получится преобразовать из него, или скажите где посмотреть, перерыл все, что у меня есть, не нашел.
[Setup]
AppName=MyProg
AppVerName=MyProg 1.0
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg

[Files]
Source: MyProgENG.exe; DestDir: {app}; DestName: MyProg.exe; Check: english;
Source: MyProgRUS.exe; DestDir: {app}; DestName: MyProg.exe; Check: russian;

[Code]
var
RadioButton1, RadioButton2: TNewRadioButton;

function russian: Boolean;
begin
Result := RadioButton1.Checked;
end;

function english: Boolean;
begin
Result := RadioButton2.Checked;
end;

procedure InitializeWizard();
var
MsgStr: TNewStaticText;
begin
MsgStr := TNewStaticText.Create(WizardForm);
with MsgStr do
begin
Top := ScaleY(130);
Left := ScaleX(3);
Width := ScaleX(400);
AutoSize := False;
Caption := 'Выберите какой язык установить для MyProg:';
Parent := WizardForm.SelectTasksPage;
end;

RadioButton1 := TNewRadioButton.Create(WizardForm);
with RadioButton1 do
begin
Top := ScaleY(150);
Left := ScaleX(10);
Width := ScaleX(300);
Caption := 'Русский';
Checked := True;
Parent := WizardForm.SelectTasksPage;
end;

RadioButton2 := TNewRadioButton.Create(WizardForm);
with RadioButton2 do
begin
Top := ScaleY(170);
Left := ScaleX(10);
Width := ScaleX(300);
Caption := 'Английский';
Parent := WizardForm.SelectTasksPage;
end;
end;[/more]


Добавлено:
он на два языка (просто мне нужно на более 20 языков, а прокрутка в Таске как то не смотрится) может, у кого получится преобразовать из него, или скажите где посмотреть, перерыл все, что у меня есть, не нашел.
Автор: Artem_Butenko
Дата сообщения: 09.11.2008 16:36
Sampron -- если выносить форму за пределы экрана используя пример из руководства товарища Kindly, то ничего не получается. А иного варианта я не знаю. Если есть возможность, пожалуйста, помогите мне. Выше я задавал вопрос, как сделать абсолютно "тихий" инсталл, чтобы, даже при запуске через него внешнего *.exe, заголовок окна "тихого" инсталла не появлялся бы на панели быстрого запуска. Т.е., реально ли сделать так, чтобы "тихий" инсталл (написанный в Inno Setup) функционировал как процесс, без "отрисовки" графического интерфейса?
Автор: Sampron
Дата сообщения: 09.11.2008 17:05
Artem_Butenko
Как убрать с панели запуска я незнаю, а вынести форму за пределы экрана чтобы не отображалась страница установки можно [more=так]
[_Code]
procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.NextButton.OnClick(nil) //эмулируем нажатие кнопки "Далее" на всех страницах
WizardForm.SetBounds(-100,-100,0,0) //выносим форму за пределы экрана
end;
[/more]
Diawer
Попробуй [more=так]
[Files]
Source: compiler:Default.isl; DestDir: {app}; Check: english
Source: compiler:Languages\Russian.isl; DestDir: {app}; Check: russian

[_Code]
var
LangEdit: TComboBox;

function russian: Boolean;
begin
Result:=LangEdit.ItemIndex = 0
end;

function english: Boolean;
begin
Result:=LangEdit.ItemIndex = 1
end;

procedure InitializeWizard();
begin
LangEdit:=TComboBox.Create(WizardForm)
LangEdit.SetBounds(0,100,150,21)
LangEdit.Parent:=WizardForm.SelectTasksPage
LangEdit.Items.add('Русский')
LangEdit.Items.add('English')
LangEdit.ItemIndex:=0
end;
[/more]
Автор: Dimbay
Дата сообщения: 09.11.2008 17:43
STRATOSV
Автор: Artem_Butenko
Дата сообщения: 09.11.2008 18:23
Sampron -- спасибо за быструю помощь, я и не думал, что скрипт м.б. таким компактным!
Автор: GriSky
Дата сообщения: 09.11.2008 18:25
К вопросу который я задавал добавлю код, может будет понятней, используется Corona Skin, извиняюсь если выглядит все нелепо, недели две занимаюсь установщиками вообще, в секции [ini] есть уже примерно что надо
[more=код]
[Setup]
AppName=Counter Strike v1.4
AppVersion=1.4.2.9
AppPublisher=Gri©
VersionInfoVersion=1.4.2.9
AppVerName=Counter Strike Full Sheregesh v1.4
DefaultDirName={pf}\Valve
UsePreviousAppDir=false
DirExistsWarning=no
OutputBaseFilename=Counter Strike Full Sheregesh v1.4
OutputDir=D:\cs\
UninstallDisplayName={#SetupSetting("AppName")}
ShowLanguageDialog=auto
VersionInfoCompany=Gri©
InfoBeforeFile=C:\Program Files\Inno Setup 5\Examples\ReadMe.rtf
SetupIconFile=D:\cs\cstrike.ico
VersionInfoTextVersion=1.4.2.9
VersionInfoCopyright=Gri©
AppCopyright=Gri©
AppSupportURL=192.168.0.36

[_ISToolPreCompile]
;to build in installer check of minimal requirements. Встроить в инсталлятор проверку минимальных требований и показ сведений о системе. Чтобы отключить тест системы, удалите параметр Requirements
    #define Requirements "NeedSys:= 5.01; NeedSp:= 2; NeedMHZ:= 1000; NeedRAM:= 128; NeedVRAM:= 25; NeedSwap:= 128; NeedSoundCard:= 'Realtek AC97 Audio'; NeedRegKey:= 'reg:HKLM\Software\Microsoft\DirectX\Version'; NeedRegKeyOK:='Package DirectX is installed'; NeedRegKeyNO:='Necessary to install DirectX'"

;add Media-player. добавить Медиа-плеер. Плейлист создаётся из указанной папки, либо из папки 'Моя музыка' (при отсутствии первой)
    #define MediaPlayer    "{src}\Music"    ;чтобы отключить воспроизведение музыки/видео во время установки, удалите эту строку

;SlideShow. Путь к СКРИНСЭВЕРУ, BMP-картинке или внешнему AVI-файлу. Для SBSlideShow.scr нужна папка Slides рядом с инсталлятором, иначе запустится слайдшоу папки 'Мои рисунки'
    #define ShowOnBackground SourcePath + "\SBSlideShow.scr|3"     ;задержка по-умолчанию 5 секунд. Чтобы отключить фон, удалите строку

;The screen of the information or a screenshot. Экран справки/скриншота (требуется файл 'AppName Splash.bmp' и/или 'AppName Splash.txt'), параметры оформления текста указывать необязательно
    #define EnableSplash "Font.Color:= clNavy; Font.Name:= 'Tahoma'; Font.Size:= 10; Font.Style:= [fsItalic]; SplashTextLeft:= 32; SplashTextTop:= 14; //SplashTextWidth:= 400; SplashTextHeight:= ClientHeight - SplashTextTop"

;Improved progress, calculation of time before end of unpacking. Улучшенный прогрессбар, расчёт времени распаковки, подсчёт объёма распакованных файлов, таймер, горячие клавиши, автозапуск след. трека в плейлисте, скрытие сообщений
    #define PerfectProgressBar 10    ;ненулевое значение включает подсчёт объёма распакованных файлов через заданный шаг прогрессбара (от 1 до 100%)
;    #define AviOnProgress SkinPath + "Animation.avi"    ;разрешение 300х96, скачать (112Kb) можно здесь: http://victor-dobrov.narod.ru/InnoExtracting.avi
    #define AutoRunSetup "{app}\ReadMeRus.rtf"    ;если инсталлятор запущен повторно, возможен автозапуск данного файла
    #define AutoPass    true    ;скрыть страницу ввода пароля (этот ключ нужен, если требуется только зашифровать инсталлятор)
;    #define LicenseScroll    10        ;блокировать флажок о принятии условий 'Лицензионного соглашения', пока не будет пролистано указанное число строк
;    #define LogoCoord    "10,50"        ;координаты X,Y логотипа на странице "Приветствие" (если отсутствует, то устанавливается значение: 12,58)
    #define WizardPos    "50,50"        ;смещение окна мастера в процентах (50,50 - центр), первая цифра - по горизонтали, вторая по вертикали
    #define MiniProgress "100,100"    ;с началом копирования окно инсталлятора станет компактным и переместится в заданную позицию
;    #define TimeLimit '2007/12/31'    ;устанавливать только до заданной даты: год, месяц, день, час, минута (достаточно указать только год)

;Corona Skin® & checking System Requirements version 5.4.0, © Victor Dobrov, thanks to Genri, htuos, Sampron, Kindly, iTaSmania.
    #define    SkinPath AddBackslash(SourcePath) + "Corona\"    ;путь к файлам обложки (SourcePath - это папка главного (этого) скрипта)
    #include    SkinPath + "Corona_kernel.iss"
;Другие задания
    #define Soures "D:\cs"

[Messages]
English.WelcomeLabel2=Добро пожаловать в установщик игры Counter Strike.
Russian.WelcomeLabel2=Добро пожаловать в установщик игры Counter Strike.

[CustomMessages]
English.About=Добро пожаловать в установщик игры Counter Strike.

[Languages]
#expr AddLocale('English', 'compiler:Default.isl', 'ReadMe.rtf', '', ''), AddLocaleFiles
#expr AddLocale('Russian', 'compiler:Languages\Russian.isl', '', '', ''), AddLocaleFiles
;You should specify would like one language. Syntax: AddLocale(Language, Messages, License, InfoBefore, InfoAfter)

[INI]
Filename: {app}\myAC_Server\config.ini; Section: ServerSettings_1; Key: GameServerAddr; String: {IP}; Components: a\antiS
Filename: {app}\myAC_Server\config.ini; Section: ServerSettings_1; Key: GameServerPass; String: {RCONpass}; Components: a\antiS
Filename: {app}\myAC_Server\config.ini; Section: ServerSettings_1; Key: HostConnectList; String: {IP}; Components: a\antiS
Filename: {app}\myAC_Server\config.ini; Section: MainSettings; Key: ScreenShotsDir; String: {app}\screenshots\%gameserveraddr\%date\%ip\%hddsn\%name+%userid+%time.jpg; Components: a\antiS

[Run]
Filename: {app}\CS_Scan.exe; Description: Запустить CS_Scan; WorkingDir: {app}; Flags: postinstall skipifsilent nowait; Components: mon
Filename: {app}\hl.exe; Description: Запустить Counter Strike; WorkingDir: {app}; Parameters: """-nomaster -game cstrike"""; Flags: unchecked postinstall skipifsilent nowait; Components: game

[Files]
Source: Readme.rtf; DestDir: {app}; Languages: Russian; AfterInstall: StopPlay
Source: {#Soures}\game\cs\*; DestDir: {app}; Components: game\cs game\csz; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\game\csz\*; DestDir: {app}; Components: game\csz; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\patch\*; DestDir: {app}; Components: patch; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\sound\*; DestDir: {app}; Components: sound; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\rus\*; DestDir: {app}; Components: rus; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\bot\mod\*; DestDir: {app}; Components: bot\mod; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\bot\pod\*; DestDir: {app}; Components: bot\pod; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\bot\ZBot\*; DestDir: {app}; Components: bot\ZBot; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\mon\*; DestDir: {app}; Components: mon; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly; Tasks:
Source: {#Soures}\maps\*; DestDir: {app}; Components: maps; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\anti\S\*; DestDir: {app}; Components: a\antiS; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\anti\C\*; DestDir: {app}; Components: a\antiC; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\izm\priv\*; DestDir: {app}; Components: izm\priv; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\izm\tema\*; DestDir: {app}; Components: izm\tema; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\ut\background_changer\*; DestDir: {app}; Components: ut\background_changer; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\ut\sprview\*; DestDir: {app}; Components: ut\sprview; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: {#Soures}\ut\modview\*; DestDir: {app}; Components: ut\modview; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly

[Types]
Name: tweak; Description: Оптимальный выбор
Name: full; Description: Выбрать все компоненты
Name: deselect; Description: Сбросить все компоненты
Name: custom; Description: Пользовательский режим; Flags: iscustom

[Components]
Name: game; Description: Counter Strike; Types: full tweak
Name: game\cs; Description: Counter Strike 1.6; Flags: exclusive; Types: full tweak
Name: game\csz; Description: Counter Strike 1.6 + Coundition Zero; Flags: exclusive; Types: full
Name: patch; Description: Патч Counter Strike v 29; Types: custom full tweak deselect; Flags: exclusive
Name: sound; Description: Русcкие звуки радио, звуки метамода и некоторых карт; Types: full tweak
Name: rus; Description: Русификация игры; Types: full tweak
Name: maps; Description: Пакет карт Counter Strike от R(†)mAн™; Types: full tweak
Name: mon; Description: CS_Scan серверов игры; Types: full tweak
Name: bot; Description: Bot; Types: full
Name: bot\ZBot; Description: ZBot для Counter Strike с русскими звуками; Flags: exclusive; Types: full
Name: bot\mod; Description: AXX X mod v 1.7.1 для Counter Strike + ZBot; Flags: exclusive; Types: full tweak
Name: bot\pod; Description: AXX X mod v 1.8.0 для Counter Strike + PodBot; Flags: exclusive; Types: full
Name: a; Description: Античит для Counter Strike; Types: full tweak
Name: a\antiS; Description: Античит серверная часть; Flags: dontinheritcheck; Types: full tweak
Name: a\antiC; Description: Античит клиентская часть; Flags: dontinheritcheck; Types: full tweak
Name: izm; Description: Изменения в Counter Strike; Types: full
Name: izm\priv; Description: Измененная страница меню Counter Strike; Flags: dontinheritcheck; Types: full
Name: izm\tema; Description: Измененная тема Полупрозрачная; Flags: dontinheritcheck; Types: full
Name: ut; Description: Утилиты; Types: full
Name: ut\background_changer; Description: Утилита для смены фонового рисунка меню; Flags: dontinheritcheck; Types: full
Name: ut\sprview; Description: Утилита для просмотра спрайтов; Flags: dontinheritcheck; Types: full
Name: ut\modview; Description: Утилита для просмотра моделов; Flags: dontinheritcheck; Types: full

[Tasks]
Name: csde; Description: Создать ярлык для Counter Strike на рабочем столе; GroupDescription: Ярлыки; Components: game
Name: csdeS; Description: Создать ярлык для Counter Strike Server на рабочем столе; GroupDescription: Ярлыки; Components: game
Name: mayaS; Description: Создать ярлык для myAC Сервер на рабочем столе; GroupDescription: Ярлыки; Components: a\antiS
Name: mayaC; Description: Создать ярлык для myAC Клиент на рабочем столе; GroupDescription: Ярлыки; Components: a\antiC
Name: cszde; Description: Создать ярлык для Coundition Zero на рабочем столе; GroupDescription: Ярлыки; Components: game\csz
Name: monde; Description: Создать ярлык для CS_Scan на рабочем столе; GroupDescription: Ярлыки; Components: mon
Name: monrun; Description: Поместить CS_Scan в автозагрузку; GroupDescription: Автозагрузка; Components: mon

[Icons]
Name: {userdesktop}\Counter Strike; Filename: {app}\hl.exe; WorkingDir: {app}; IconFilename: {app}\cstrike\cstrike.ico; Parameters: -nomaster -game cstrike; Components: game; Tasks: csde
Name: {userdesktop}\Coundition Zero; Filename: {app}\hl.exe; WorkingDir: {app}; IconFilename: {app}\czero\czero.ico; Parameters: -nomaster -game czero; Components: game\csz; Tasks: cszde
Name: {userdesktop}\CS_Scan; Filename: {app}\CS_Scan.exe; WorkingDir: {app}; Components: mon; Tasks: monde
Name: {userdesktop}\Counter Strike Server; Filename: {app}\hlds.exe; WorkingDir: {app}; Components: game; Tasks: csde
Name: {userdesktop}\Antichit-Server; Filename: {app}\myAC_Server\myACserv_pro.exe; WorkingDir: {app}\myAC_Server\; Components: a\antiS; Tasks: mayaS
Name: {userdesktop}\Antichit-Client; Filename: {app}\myAC_Client\myAC.exe; WorkingDir: {app}\myAC_Client\; Components: a\antiC; Tasks: mayaC
Name: {commonstartup}\CS_Scan; Filename: {app}\CS_Skan.exe; WorkingDir: {app}; Components: mon; Tasks: monrun
Name: {group}\Counter Strike; Filename: {app}\hl.exe; WorkingDir: {app}; IconFilename: {app}\cstrike\cstrike.ico; Parameters: """-nomaster -game cstrike"""; Components: game
Name: {group}\Counter Strike Server; Filename: {app}\hlds.exe; WorkingDir: {app}; Components: game; Tasks: csdeS
Name: {group}\Coundition Zero; Filename: {app}\hl.exe; WorkingDir: {app}; IconFilename: {app}\czero\czero.ico; Parameters: """-nomaster -game czero"""; Components: game\csz
Name: {group}\CS_Scan; Filename: {app}\CS_Scan.exe; WorkingDir: {app}; Components: mon
Name: {group}\Античит\Античит-Клиент; Filename: {app}\myAC_Client\myAC.exe; WorkingDir: {app}\myAC_Client\; Components: a\antiC
Name: {group}\Античит\Античит-Сервер; Filename: {app}\myAC_Server\myACserv_pro.exe; WorkingDir: {app}\myAC_Server\; Components: a\antiS
Name: {group}\Утилиты\Утилита для смены фонового рисунка меню; Filename: {app}\BC4CS1.6.exe; WorkingDir: {app}; Components: ut\background_changer
Name: {group}\Утилиты\Утилита для просмотра спрайтов; Filename: {app}\SprView.exe; WorkingDir: {app}; Components: ut\sprview
Name: {group}\Утилиты\Утилита для просмотра моделов; Filename: {app}\Half-Life Model Viewer\hlmv.exe; WorkingDir: {app}\Half-Life Model Viewer\; Components: ut\modview
Name: {group}\{cm:UninstallProgram,{#AppName}}; Filename: {uninstallexe}

[Registry]
Root: HKCU; SubKey: Software\Valve; Flags: deletekey uninsdeletekey noerror; Components: game
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: string; ValueName: ValveKey; ValueData: 5RP2E-EPH3K-BR3LG-KMGTE-FN8PY; Flags: uninsdeletekey noerror; Components: game
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: 0; ValueData: 150; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: 1; ValueData: 87; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: 2; ValueData: 239; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: 3; ValueData: 65; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: 4; ValueData: 56; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: 5; ValueData: 47; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: 6; ValueData: 144; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: 7; ValueData: 49; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: 8; ValueData: 128; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: 9; ValueData: 75; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: Path; ValueData: {app}\hl.exe; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: Path2; ValueData: d:\hl2\hl2.exe; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: cdp; ValueData: C:\Program Files\Cheating-Death\cdeath.exe; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: CDRun; ValueData: 0; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: AutoS; ValueData: 0; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: Param; ValueData: -console -unsecure -noauth -nomaster; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: Param2; ValueData: -console -steam; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: Left; ValueData: 155; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: Top; ValueData: 161; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: Height; ValueData: 351; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: PHeight; ValueData: 420; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: conf; ValueData: 0; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: ip1; ValueData: 192; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: ip2; ValueData: 168; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: subF; ValueData: 0; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: subT; ValueData: 1; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: compF; ValueData: 1; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: compT; ValueData: 225; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: Rus; ValueData: 1; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: Eoc; ValueData: 0; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: CD; ValueData: 0; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: Sot; ValueData: 0; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: Per; ValueData: 0; Components: mon; Flags: uninsdeletevalue noerror
Root: HKCU; SubKey: CS_Scaner\settings\settings; ValueType: string; ValueName: Brc; ValueData: 1; Components: mon; Flags: uninsdeletevalue noerror

[Code]
Procedure CurPageChanged(CurPageID: Integer);
    Begin
        ShowSkinPage(CurPageID)        { Corona Skin® & System Test © Victor Dobrov}
    End;

Procedure InitializeWizard;
    Begin
        InitializeSkin        { Corona Skin® with Buttons & checking System requirements by Victor Dobrov}
    End;

Procedure DeinitializeSetup;
    Begin
        DeInitializeSkin    { требуется, если указаны MediaPlayer, PerfectProgressBar, ShowOnBackground}
    End;

Function InitializeSetup: Boolean;
    Begin
        If not WizardSilent and (FindWindowbyWindowName(FmtMessage(SetupMessage(msgSetupWindowTitle), ['{#AppName}'])) > 0) then MessageBox(0, cm('AlreadyRun'), '{#AppName}', MB_OK or $40) else Result:= true
    End;

//    #expr SaveToFile("preprocessed.iss")
[/more]
Автор: Sig666
Дата сообщения: 09.11.2008 18:25
Ребят, ну объясните пож. как реализовать http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=1420#15 Почитал хелп, оказывается abort; можно вызывать только из
InitializeSetup
InitializeWizard
CurStepChanged(ssInstall)
InitializeUninstall
CurUninstallStepChanged(usAppMutexCheck)
CurUninstallStepChanged(usUninstall)
Может можно как-то реализовать через препроцессор, чтоб программа запускалась пусть даже из CurStepChanged, но только после копирования определенного файла из секции [files], а не сразу при начале установки?
Автор: htuos
Дата сообщения: 09.11.2008 19:25
Artem_Butenko

Цитата:
Совсем забыл, а можно ли убрать отображение окна лоадера (во время исполнения внешнего файла) на панели быстрого запуска?

это называется панель задач
убрать кнопку приложения с панели задач можно так

Код: function GetWindowLong(Wnd: HWND; Index: Integer): Longint;external 'GetWindowLongA@user32.dll stdcall';

procedure InitializeWizard;
begin
ShowWindow(GetWindowLong(MainForm.Handle,-8),0);
end;
Автор: Artem_Butenko
Дата сообщения: 09.11.2008 19:51
htuos -- что же не знал, но, в любом случае, буду использовать Ваш вариант. За что - большое спасибо!
Автор: htuos
Дата сообщения: 09.11.2008 21:27
Artem_Butenko
а вообще я бы сделал так

Код: 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';
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; external 'ShowWindow@user32.dll stdcall';

procedure InitializeWizard;
var
TAppHandle: HWND;
begin
TAppHandle:=GetWindowLong(MainForm.Handle,-8); //получаем хэндл Application'a
// *** убираем окно с экрана
WizardForm.BorderStyle:=bsNone;
WizardForm.Width:=0;
WizardForm.Height:=0;
// ****
ShowWindow(TAppHandle,0); //скрываем с панели задач
SetWindowLong(TAppHandle,-20,GetWindowLong(TAppHandle,-20) or $80); //скрываем от Alt+Tab
end;
Автор: mav34
Дата сообщения: 09.11.2008 22:36
htuos
Спасибо, но не работает
Автор: htuos
Дата сообщения: 09.11.2008 22:53
mav34

Цитата:
Спасибо, но не работает

смотря что ты подразумеваешь под "не работает"
приведенный код не дает продолжать установку приложения, если дата на компе больше 01.11.2008. или я не понял что ты хочешь
Автор: mav34
Дата сообщения: 09.11.2008 23:29

Цитата:
приведенный код не дает продолжать установку приложения, если дата на компе больше 01.11.2008

даёт, поэтому и говорю

Извини, ошибся сам. Разглядел не сразу
Автор: iltmpz
Дата сообщения: 09.11.2008 23:32
Diawer
Спасибо, тоже хороший вариант с подсказками.
В моем случае правда справа подсказка больше подходит, но сохраню и этот вариант на будущее.
И с многоязычностью кстати тоже актуально - тоже ExpandConstant использовал.

All
Кстати, другой вопрос:
Допустим, есть описание, и я его использую в коде:
russian.ComponentsDescription6=Прочитать руководство пользователя
ExpandConstant('{cm:ComponentsDescription6};')

А можно ли в описание вставить переход на новую строку (enter)?
По типу:
russian.ComponentsDescription6=Прочитать руководство\nпользователя

Пробовал \n, пытался написать %0d%0a с вызовами функций Format, обработки %-последовательностей. Символы в enter не преобразуются.
Автор: Sig666
Дата сообщения: 09.11.2008 23:33
htuos

Мне нужно пропатчить несколько больших файлов сразу после установки каждого. Вместо test.exe будет сам патчер (для каждого файла свой).
Автор: mav34
Дата сообщения: 09.11.2008 23:50

Цитата:
Символы в enter не преобразуются

a CRLF не проходит?
Автор: boss911
Дата сообщения: 10.11.2008 00:37
Удалено, сори.
Автор: iltmpz
Дата сообщения: 10.11.2008 01:19

Цитата:
a CRLF не проходит?

Это как? В доке ничего такого не нашел.
Как вообще в строке (String) вставить enter?
Автор: Diman19
Дата сообщения: 10.11.2008 02:50
Всем привет!Скажите пожалуйста как создать раскрывающиеся список дополнительных компонентов?Список я создал только получилось всё в одном списке.

вот сам код

[Components]
Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help File"; Types: full
Name: "readme"; Description: "Readme File"; Types: full
Name: "readme\en"; Description: "English"; Flags: exclusive
Name: "readme\de"; Description: "German"; Flags: exclusive

[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Components: program
Source: "MyProg.chm"; DestDir: "{app}"; Components: help
Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme
Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme


Скажите пожалуйста как сделать чтобы выглядело вот так



P.s Также есть вопрос!Как создать дополнительное окно перед установкой где нужно будет вводить специальный ключ?Подскажите пожалуйста.

Спасибо!
Автор: htuos
Дата сообщения: 10.11.2008 08:00
iltmpz

Цитата:
Messages may take arguments, from %1 up to %9. You can rearrange the order of the arguments (i.e. move the %2 before a %1) and also duplicate arguments if needed (i.e. "%1 ... %1 %2"). On messages with arguments, use two consecutive "%" characters to embed a single "%". "%n" creates a line break.

Автор: Diawer
Дата сообщения: 10.11.2008 08:07
iltmpz
В [CustomMessages] - %n, в [Code] - #13
Автор: htuos
Дата сообщения: 10.11.2008 08:09
Sig666

Цитата:
Мне нужно пропатчить несколько больших файлов сразу после установки каждого. Вместо test.exe будет сам патчер (для каждого файла свой).

ну тогда используй для запуска патчера секцию [Run]. только здесь по моему отката уже нет, только uninstall, который можно руками запустить.
ЗЫ кто тебе мешает в инсталлятор добавить уже патченные файлы?
Автор: Diawer
Дата сообщения: 10.11.2008 11:05
Sampron
Спасибо, только есть вопрос, поле с названием языка активно, т.е. имя можно редактировать, это как то не в тему, как это убрать.
Еще, как то можно сделать, что бы в LangEdit.Items.add('English') – язык брался автоматически из [Languages].
[more][Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg

[Languages]
Name: english; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: compiler:Default.isl; DestDir: {app}; Check: english
Source: compiler:Languages\Russian.isl; DestDir: {app}; Check: russian

[Code_]
var
LangEdit: TComboBox;

function english: Boolean;
begin
Result:=LangEdit.ItemIndex = 0
end;

function russian: Boolean;
begin
Result:=LangEdit.ItemIndex = 1
end;

procedure InitializeWizard();
var
MsgStr: TNewStaticText;
begin
MsgStr := TNewStaticText.Create(WizardForm);
MsgStr.SetBounds(0,150,150,21);
MsgStr.AutoSize := False;
MsgStr.Caption := 'Выберите язык программы:';
MsgStr.Parent := WizardForm.SelectTasksPage;

LangEdit:=TComboBox.Create(WizardForm)
LangEdit.SetBounds(0,170,150,21)
LangEdit.Parent:=WizardForm.SelectTasksPage
LangEdit.Items.add('English')
LangEdit.Items.add('Русский')
if ActiveLanguage = 'english' then
begin
LangEdit.ItemIndex:=0
end;
if ActiveLanguage = 'russian' then
begin
LangEdit.ItemIndex:=1
end;
end;[/more]

htuos
Я не совсем понял, что куда.

Автор: htuos
Дата сообщения: 10.11.2008 12:23
Diawer

Цитата:
Я не совсем понял, что куда.

если ты про ComboBox, то Sampron тебе пример дал, так что в мою писанину можешь не смотреть

а чтобы не редактировалось
[more]procedure InitializeWizard();
var
MsgStr: TNewStaticText;
begin
MsgStr := TNewStaticText.Create(WizardForm);
MsgStr.SetBounds(0,150,150,21);
MsgStr.AutoSize := False;
MsgStr.Caption := 'Выберите язык программы:';
MsgStr.Parent := WizardForm.SelectTasksPage;

LangEdit:=TComboBox.Create(WizardForm)
LangEdit.Style:=csDropDownList;
LangEdit.SetBounds(0,170,150,21)
LangEdit.Parent:=WizardForm.SelectTasksPage
LangEdit.Items.add('English')
LangEdit.Items.add('Русский')
case ActiveLanguage of
'english': LangEdit.ItemIndex:=0;
'russian': LangEdit.ItemIndex:=1;
end;
end;[/more]
Автор: Sig666
Дата сообщения: 10.11.2008 14:07
htuos


Цитата:
ЗЫ кто тебе мешает в инсталлятор добавить уже патченные файлы?

Патчатся они или нет - зависит от выбранной задачи, поэтому приходиться заморачиваться.

А вообще реально остановить работу инсталлятора иным способом, кроме abort и убийства процесса?

ЗЫ: а из [Run] можно отловить код выхода разве?
Автор: Artem_Butenko
Дата сообщения: 10.11.2008 15:28
Друзья

----------------------------------------------
Почти доработал скрипт лоадера на Inno Setup, наконец-то понял как убрать окно с панели задач, но совсем не могу сообразить почему упаковываются в исполнительный файл инсталлятора файлы "MyProgram1.ex_" и "MyProgram2.ex_", ведь на них стоит константа {src}. Помогите разобраться, полный скрипт привожу ниже.
----------------------------------------------

Цитата:
[Files]
Source: "MyProgram1.ex_"; DestDir: "{src}"; BeforeInstall: SetupFBird; Flags: noencryption nocompression
Source: "MyProgram2.ex_"; DestDir: "{src}"; BeforeInstall: SetupFBird; Flags: noencryption nocompression

[Code]
procedure SetupFBird();
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{src}\MyProgram1.ex_'), '', '', SW_SHOWNORMAL,
ewWaitUntilTerminated, ResultCode);
Exec(ExpandConstant('{src}\MyProgram2.ex_'), '', '', SW_SHOWNORMAL,
ewWaitUntilTerminated, ResultCode);
end;

----------------------------------------------
Что здесь не так? Во-первых, необходимо, чтобы каждый файл срабатывал один раз, а у меня они запускаются дважды. Во-вторых, константа {src} не срабатывает и файлы, которые по идее должны лежать рядом с исполнительным файлом инсталлятора, просто пакуются в него!
----------------------------------------------

Пробовал вот так, но все равно файлы "MyProgram1.ex_" и "MyProgram2.ex_" пакуются в общий инсталлятор, кроме того, перед непосредственным исполнением распаковываются рядом с ним! Что совсем недопустимо, при записи этого инсталлятора на диск.

Цитата:
[Files]
Source: "MyProgram1.ex_"; DestDir: "{src}"; BeforeInstall: SetupFBird1; Flags: noencryption nocompression
Source: "MyProgram2.ex_"; DestDir: "{src}"; BeforeInstall: SetupFBird2; Flags: noencryption nocompression

[Code]
procedure SetupFBird1();
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{src}\MyProgram1.ex_'), '', '', SW_SHOWNORMAL,
ewWaitUntilTerminated, ResultCode);
end;
procedure SetupFBird2();
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{src}\MyProgram2.ex_'), '', '', SW_SHOWNORMAL,
ewWaitUntilTerminated, ResultCode);
end;
Автор: htuos
Дата сообщения: 10.11.2008 15:37
Sig666

Цитата:
Патчатся они или нет - зависит от выбранной задачи, поэтому приходиться заморачиваться.

А вообще реально остановить работу инсталлятора иным способом, кроме abort и убийства процесса?

ЗЫ: а из [Run] можно отловить код выхода разве?

из [Run] код не получишь, Exec нужен

попробуй в этом направлении покопать [more][Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg

[Files]
Source: 1.dll; DestDir: {app}; AfterInstall: Patch()
Source: 2.dll; DestDir: {app}; AfterInstall: Patch()

[Code_]
procedure Patch;
var
ResultCode: Integer;
begin
case ExtractFileName(ExpandConstant(CurrentFileName)) of
'1.dll': begin
if Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
MsgBox('Hello.', mbInformation, MB_OK);
if ResultCode=0 then WizardForm.CancelButton.OnClick(nil);
end;
'2.dll': if Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
MsgBox('Hello 2.', mbInformation, MB_OK);
end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
end;[/more]. может получится чего

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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