我有一个自定义操作,可以启动安装的应用程序。我的软件通过Windows服务自动更新,这意味着它必须以静默方式运行。我使用/ q命令行参数调用burn,并且我的应用安装良好。问题是我的应用程序在不应该启动时启动,因为该服务未设置为与桌面交互。因此,我在网上关注了许多帖子,它们显示了添加属性。问题在于自定义操作仍在执行。这是我包装中的物品:
<Variable Name="ISSILENT" Value="0" bal:Overridable="yes" />
<Chain>
<MsiPackage Id="foobar" SourceFile=".\bin\$(var.Platform)\foobarInstaller.msi" DisplayInternalUI="yes">
<MsiProperty Name="ISSILENT" Value="[ISSILENT]" />
</MsiPackage>
</Chain>
这就是我的msi中的东西:
<Property Id="ISSILENT"/>
<CustomAction Id="LaunchApplication"
Directory="INSTALLDIR"
ExeCommand=""[INSTALLDIR]foobarui.exe""
Execute="deferred"
Return="asyncNoWait"
Impersonate="yes"
>
ISSILENT=0
</CustomAction>
最后从命令行指定:
foobar.exe /q ISSILENT=1
因此,结果应该是应用程序未启动但仍启动。
当然,更好的解决方案将涉及询问WIX引擎以查看安装程序是否以静默方式运行,但是我的理解是,burn从安装程序中隐藏了必要的信息,因此无法确定它是否以静默方式运行。
答案 0 :(得分:0)
我使用了错误的XML块来指定我的条件。一旦我将其移到这里,它就起作用了:
<InstallExecuteSequence>
<Custom Action="LaunchApplication" After="StartServices" >
(ISSILENT=0)
</Custom>
</InstallExecuteSequence>