【问题标题】:How to pass command line arguments in WIX Custom Action如何在 WIX 自定义操作中传递命令行参数
【发布时间】:2014-03-04 00:15:03
【问题描述】:

我正在使用 WIX 安装程序,其中我有如下自定义操作。

 <CustomAction Id="ConfigureBiodentifyServer" FileKey="Biodentify.InstallUtil.exe" Execute="deferred" ExeCommand="/configurebiodentify /metadata=&quot;DefaultSetup.xml&quot; /iskiosk=&quot;false&quot;/databaseType=&quot;SQLServer&quot; /sqlserver=&quot;[$(var.SqlServerName)]&quot; /sqluser=&quot;&quot; /sqlpw=&quot;&quot; /domainName=&quot;[$(var.ComputerDomain)]&quot; /domainPk=&quot;[$(var.DomainPk)]&quot; " Impersonate="yes"  Return="check" />


<InstallExecuteSequence><Custom Action="ConfigureBiodentifyServer" After="StartServices">NOT Installed And $(var.InstallType) = "SERVER" </Custom>  </InstallExecuteSequence>

但是当我安装我的安装程序时,ExeCommand 出错了?

【问题讨论】:

  • 除了Christopher的回答之外,那个自定义动作的失败点太多了,无法回答。您可能没有安装正确的 .NET Framework;您的安装程序类代码中可能存在错误;安装用户可能没有执行该配置的权限。命令行可能会出错。老实说,转储安装程序类,如果您将它们用于其他任何东西(如服务),也将它们删除。

标签: wix installation custom-action


【解决方案1】:

您应该考虑几个级别的重构。首先,您正在调用 InstallUtil,这意味着您正在调用 Installer 类自定义操作。此自定义操作应重构为 WiX 部署工具基础 (DTF),以利用更好的托管模式(例如,您可以获取/设置 Windows 安装程序属性,而不是传递命令行参数)。

WiX 还具有处理 SQL 脚本的 SQL 扩展,因此您可能在这里重新发明*。

【讨论】: