问题描述
根据我在 Inno Setup 中选择的内容,安装程序应添加一个包含包名后跟 ,
的条目到 config.ini
并将少数特定设置所需的正确预制配置文件(存储在安装程序中)提取到 Config
文件夹中。
有很多程序,比如 Chrome/Firefox,不需要任何参数或额外的配置来安装。
<package1>,<package2 /X /Y /Z>,<package 3> ...
等
其中 <packageX>
是与安装程序选择菜单中的复选框相关联的字符串值。
加分项:再次..不仅输出config.ini
,而且还为特定程序提取必要的预制配置设置到文件夹C:/NKsetup/Config/
解决方法
将您的每个包作为组件添加到 Components
section。然后在 Files
section 中,您可以根据所选组件选择安装哪些文件。对于包列表配置文件,您需要使用 WizardIsComponentSelected
function 对其进行编码。
[Setup]
DefaultDirName=C:\some\path
[Types]
Name: "custom"; Description: "-"; Flags: iscustom
[Components]
Name: "sqlserver"; Description: "Microsoft SQL server"
Name: "chrome"; Description: "Google Chrome"
Name: "firefox"; Description: "Mozilla Firefox"
[Files]
Source: "install.bat"; DestDir: "{app}"
Source: "common-config.ini"; DestDir: "{app}"
Source: "sqlserver-config.ini"; DestDir: "{app}"; Components: sqlserver
Source: "browsers-config.ini"; DestDir: "{app}"; Components: chrome firefox
[Run]
Filename: "{app}\install.bat"; StatusMsg: "Installing..."
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
ConfigPath: string;
Packages: string;
begin
if CurStep = ssPostInstall then
begin
if WizardIsComponentSelected('sqlserver') then
begin
Packages := Packages + ',sql-server-express /X /Y /Z';
end;
if WizardIsComponentSelected('chrome') then
begin
Packages := Packages + ',chrome';
end;
if WizardIsComponentSelected('firefox') then
begin
Packages := Packages + ',firefox';
end;
// Remove the leading comma
if Packages <> '' then
begin
Delete(Packages,1,1);
end;
ConfigPath := ExpandConstant('{app}\config.ini');
// This is not Unicode-safe
if not SaveStringToFile(ConfigPath,Packages,False) then
begin
Log(Format('Error saving packages to %s',[ConfigPath]));
end
else
begin
Log(Format('Packages saved to %s: %s',[ConfigPath,Packages]));
end;
end;
end;