Innosetup,最佳实践自定义安装将变量传递给外部应用程序

时间:2012-02-24 18:29:48

标签: inno-setup

我使用InnoSetup进行了安装任务,我不太确定如何正确使用。

情况如下: 1个innosetup自定义页面,包含一些文本框和复选框。基本上包含targeturl和windows servicename。可能会更晚。 需要将此自定义信息传递给两个不同的app.config文件。

现在问题,怎么办? 我的第一个目的是使用[Run]段和一堆参数,例如: [跑] 文件名:{app} \ MyApp.exe;参数:/ install;标志:runminimized

但我不知道如何将自定义数据传递给应用程序。

也许可以创建一些环境变量并以这种方式传递数据? 也许可以创建一个具有必要值的临时文件? 也许应该在安装期间在加载的dll中执行此操作而不是安装后?

非常感谢任何建议。

2 个答案:

答案 0 :(得分:2)

并且谢谢。对于“@ DenverCoder9”:

基本上我最终做了什么,这在Inno-setup的捆绑示例中几乎是一致的。错过了Inno-setup允许XML操作(通过MSXML)的事实,这允许我:  包括一个示例配置文件(app.config.sample)。  加载示例配置文件  使用自定义表单中收集的数据修改它。  将它保存到正确的位置。

[Files]
 ...
Source: ..\UpdateService\UpdateService\Server\bin\Release\UpdateService.exe.config; DestDir: {app}; Permissions: users-modify; Flags: comparetimestamp onlyifdoesntexist; AfterInstall: MyAfterInstall;


[Code]
procedure MyAfterInstall();
var XMLDoc : Variant;
var RootNode : Variant;
begin
//  if(FLAG_UPDATE_SERVICE_CONFIG) then begin
    XMLDoc := CreateOleObject('MSXML2.DOMDocument');
    XMLDoc.async := False;
    XMLDoc.resolveExternals := False;
    XMLDoc.load(ExpandConstant(CurrentFilename));
    RootNode := XMLDoc.documentElement;
    ...
   end;
end;

这样做的另一个好处是,我有一个示例文件可供需要手动修改应用程序的人员使用。

答案 1 :(得分:1)

您是否可以使用命令行参数将Inno Setup安装程序中输入的值传递给外部应用程序?

外部应用程序(我假设是.NET)可以处理从命令行到配置文件(即“App.config”)的值。 .NET应用程序的Main(string[] args)方法可以检查命令行参数值。按照建议使用[Run]部分,并将这些值作为参数传递(使用Parameters)。