我可以将安装命令行参数放在安装期间调用的文件中吗?

Can I put setup command line parameters in a file which is called during installation instead?

创建我的 setup.exe 之后,我必须将其打包用于各种软件部署工具。因此,我不能用参数调用 setup.exe,而是将自己的参数放在 setup.exe

旁边的 setup.ini 文件中
[Code]
var
    MyIniFile: String;
function InitializeSetup(): Boolean;
var
    LoadFromIniFile: String;
begin
    Result := true;
    MyIniFile := ExpandConstant('{srcexe}');      //writes the full path of the setup.exe in "MyIniFile"
    MyIniFile := Copy(MyIniFile, 1, Length(MyIniFile) - Length(ExtractFileExt(MyIniFile))) + '.ini'; //changes the ".exe" into ".ini"
    if FileExists(MyIniFile) then LoadFromIniFile := MyIniFile;  //checks wether there is a ini-file
    if LoadFromIniFile <> '' then begin
        MyLogFile := GetIniString('Setup', 'Log', MyLogFile , LoadFromIniFile);
        ProductName := GetIniString('Setup', 'ProductName', ProductName, LoadFromIniFile);
    end;
end;    

现在我还想将所谓的 "Setup Command Line Parameters"(列在 Inno Setup Help 站点上)放入我的 ini 文件中。我认为 /Dir="x:\dirname 参数有一种方法,我还没有弄清楚。但我也想在里面有 /SILENT 参数,你认为有办法做到这一点吗?如果是,你会怎么做?如果没有,你能告诉我为什么不吗?

所以为不同的产品定制你的安装程序,我建议你使用 pre-processor 并自动为每个产品构建安装程序(具有不同的 "defines"),而不是使用外部 INI文件。

例如,要在构建安装程序时能够更改应用程序名称和生成的可执行文件,请使用如下脚本:

[Setup]
AppName={#AppName}
OutputBaseFilename={#BaseFilename}

现在您可以使用命令行自动创建两个不同的安装程序:

ISCC.exe Example1.iss /dAppName=App1 /dBaseFilename=SetupApp1
ISCC.exe Example1.iss /dAppName=App2 /dBaseFilename=SetupApp2

关于隐式静默安装:

除了触发静默安装的命令行 /SILENT 开关外,没有 API。

但是您可以通过禁用大多数安装程序页面来创建近乎无声的安装:

[Setup]
DisableWelcomePage=true
DisableDirPage=true
DisableProgramGroupPage=true
DisableReadyPage=true
DisableFinishedPage=true

实际上上面的例子禁用了所有的默认页面。但是 Inno Setup 编译器将忽略 DisableReadyPage=true,如果之前的所有其他页面都被禁用。

您可能想选择显示其他页面。例如欢迎页面(省略 DisableWelcomePage=true,但保留 DisableReadyPage=true)。


如果您不介意使用外部文件(因为您已经使用了外部 INI 文件),您当然可以将安装程序包装到批处理文件中,然后使用 /SILENT 开关调用安装程序。