Ветеран
Сообщения: 1133
Благодарности: 581
|
Профиль
|
Отправить PM
| Цитировать
Накидал пример, как это делается:
Пример
Код: 
; имя файла
#define NameInf "unattended.ini"
#define MyAppName "My Program"
#define MyAppVerName "My Program 1.5"
#define MyAppExeName "MyProg.exe"
[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=True
OutputDir=.
ShowLanguageDialog=auto
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: en; MessagesFile: compiler:Languages\English.isl
Name: ru; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
en.WelcomeLabel2=Click Next to continue, or Cancel to exit.
ru.WelcomeLabel2=Нажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти.
en.CreateDesktopIconAllUsers=For all users
ru.CreateDesktopIconAllUsers=Для всех пользователей
en.CreateDesktopIconUserOnly=For the current user only
ru.CreateDesktopIconUserOnly=Для текущего пользователя
en.UnattendedCaption=Unattended Install Maker for %1
ru.UnattendedCaption=Создание атоматического инсталлятора для %1
en.UnattendedCancelButton=Finish
ru.UnattendedCancelButton=Готово
en.FinishedHeadingLabel=Here something we write...
ru.FinishedHeadingLabel=Тут что-то пишем...
en.FinishedLabel=Here something we write...%n%n%nClick Finish.
ru.FinishedLabel=Тут что-то пишем...%n%n%nНажмите на кнопку "Готово".
[Components]
Name: main; Description: Main Files; Types: full compact custom; Flags: fixed
Name: help; Description: Help Files; Types: full
Name: help\english; Description: English; Types: full
Name: help\dutch; Description: Dutch; Types: full
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Components: main
Name: desktopicon\common; Description: {cm:CreateDesktopIconAllUsers}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: exclusive
Name: desktopicon\user; Description: {cm:CreateDesktopIconUserOnly}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: exclusive unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: unchecked
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: main; Flags: ignoreversion
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: help\english; Flags: ignoreversion
Source: compiler:Examples\Readme-Dutch.txt; DestDir: {app}; Components: help\dutch; Flags: ignoreversion
[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}; Tasks: desktopicon\common
Name: {userdesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}; Tasks: desktopicon\user
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon
[Code]
var
MakeUnattended: Boolean;
function InitializeSetup(): Boolean;
begin
Result := True;
MakeUnattended := Pos('-MAKEUNATTENDED', Uppercase(GetCmdTail)) > 0;
end;
procedure CreateBat;
begin
SaveStringToFile(
ExtractFilePath(ExpandConstant('{srcexe}')) + ChangeFileExt('{#NameInf}', '.bat'), // имя батника
'"' + ExtractFileName(ExpandConstant('{srcexe}')) + '" /verysilent /norestart /LoadInf=".\{#NameInf}"'#13#10, // сама запись
False); // указываем, перезаписывать файл, если такой уже есть
end;
procedure SaveInfo;
var
FileName, Value: string;
begin
FileName := ExtractFilePath(ExpandConstant('{srcexe}')) + '{#NameInf}';
SetIniString('Setup', 'Lang', ActiveLanguage, FileName); // язык
SetIniString('Setup', 'Dir', ExpandConstant('{app}'), FileName); // выбранный каталог
SetIniString('Setup', 'Group', ExtractFileName(ExpandConstant('{group}')), FileName); // группа
SetIniBool('Setup', 'NoIcons', WizardForm.NoIconsCheck.Checked, FileName); // создавать или нет ярлык
// указываем тип установки
case WizardForm.TypesCombo.ItemIndex of
0: SetIniString('Setup', 'SetupType', 'full', FileName);
1: SetIniString('Setup', 'SetupType', 'compact', FileName);
2: SetIniString('Setup', 'SetupType', 'custom', FileName);
end;
// проверяем какие компоненты выбраны
Value := '';
if IsComponentSelected('main') then
Value := 'main,';
if IsComponentSelected('help') then
Value := Value + 'help,';
if IsComponentSelected('help\english') then
Value := Value + 'help\english,';
if IsComponentSelected('help\dutch') then
Value := Value + 'help\dutch,';
if Value <> '' then
SetLength(Value, Length(Value)-1);
SetIniString('Setup', 'Components', Value, FileName);
// проверяем доп. задачи
Value := '';
if IsTaskSelected('desktopicon') then
Value := 'desktopicon,';
if IsTaskSelected('desktopicon\common') then
Value := Value + 'desktopicon\common,';
if IsTaskSelected('desktopicon\user') then
Value := Value + 'desktopicon\user,';
if IsTaskSelected('quicklaunchicon') then
Value := Value + 'quicklaunchicon,';
if Value <> '' then
SetLength(Value, Length(Value)-1);
SetIniString('Setup', 'Tasks', Value, FileName);
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID = wpReady) and MakeUnattended then
begin
SaveInfo; // сохраняем выбранные данные
CreateBat; // пишем батник
// делаем имитацию финальной страницы
with WizardForm do
begin
NextButton.Hide;
BackButton.Hide;
CancelButton.Left := ScaleX(310);
CancelButton.Caption := ExpandConstant('{cm:UnattendedCancelButton}');
FinishedHeadingLabel.Caption := ExpandConstant('{cm:FinishedHeadingLabel}');
FinishedLabel.Caption := ExpandConstant('{cm:FinishedLabel}');
FinishedPage.Show;
end;
end;
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if MakeUnattended then
begin // если Unattended, то закрываем инсталлятор по тихому
Cancel := True;
Confirm := False;
end;
end;
procedure InitializeWizard();
begin
if MakeUnattended then
with WizardForm do // при Unattended, указываем свои надписи
begin
Caption := ExpandConstant('{cm:UnattendedCaption,{#MyAppName}}');
WelcomeLabel1.Caption := ExpandConstant('{cm:UnattendedCaption,{#MyAppName}}');
WelcomeLabel2.Caption := ExpandConstant('{cm:WelcomeLabel2}');
end;
end;
|