Как разделить скрипт Inno Setup на несколько файлов? - PullRequest
4 голосов
/ 19 октября 2010

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

1 Ответ

10 голосов
/ 19 октября 2010

В зависимости от версии InnoSetup, которую вы используете, вы можете использовать включаемый файл. В приведенном ниже примере используются три файла (main.iss, code.iss, commonfiles.iss):

Основной файл:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVerName "My Program 1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\util\innosetup\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

#include "CommonFiles.iss"

; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent

#include "code.iss"

CommonFiles.iss:

Source: "Common.DLL"; DestDir: "{app}"; Flags: ignoreversion

Code.iss:

[code]
function IsDotNET11Detected(): boolean;
// Indicates whether .NET Framework 1.1 is installed.
var
    success: boolean;
    install: cardinal;
begin
    success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322', 'Install', install);
    Result := success and (install = 1);
end;

function InitializeSetup(): Boolean;
begin
    if not IsDotNET11Detected then begin
        MsgBox('This software requires the Microsoft .NET Framework 1.1.'#13#13
            'Please use Windows Update to install this version,'#13
            'and then re-run the setup program.', mbInformation, MB_OK);
        Result := false;
    end else
        begin
        MsgBox('Framework installed',mbInformation, MB_OK);
        Result := true;
        end
end;
...