Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата shao:
Если не сложно. »
Накидал пример, как это делается:
Пример

Код: Выделить весь код
; имя файла
#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;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:34, 28-04-2011 | #1457