在创建我的WiX安装程序时,我在安装升级之前尝试关闭应用程序时遇到了问题。下面是我试图这样做的一个例子。
<util:CloseApplication Id="CloseServe" CloseMessage="yes" Target="server.exe" ElevatedCloseMessage="yes" RebootPrompt="no"/>
<InstallExecuteSequence>
<Custom Action="WixCloseApplications" After="RemoveExistingProducts" />
<RemoveExistingProducts After="InstallInitialize"/>
<Custom Action='LaunchApplication' After='InstallFinalize'/>
<!--<Custom Action='StopServer' Before='RemoveExistingProducts'/>-->
</InstallExecuteSequence>
使用此示例,应用程序最终会关闭,但安装会在此时停止,然后执行回滚。这可能是因为在尝试关闭exe之前删除了exe吗?我尝试更改序列,以便在WixCloseApplications之后执行RemoveExistingProducts,但它然后给我一个错误代码2613.
答案 0 :(得分:7)
您可以尝试记录安装并查看可以从那里追踪的内容。尝试从命令控制台运行安装程序,如下所示:
msiexec.exe /i [msi filename] /log [filepath\logfilename.log]
答案 1 :(得分:0)
我认为您需要尽早在 InstallExecuteSequence 中关闭正在运行的应用程序,当然在 InstallInitialize 之前,它会启动对其进行更改的Windows Installer事务系统。
此外,您还应在 InstallUISequence 中运行相同的 ApplicationClose 操作,以便在您以交互方式循环浏览安装菜单时关闭应用程序。静默安装时会跳过整个InstallUISequence,因此您也需要在InstallExecuteSequence中安装它。
请注意,您可以通过返回 msiexec.exe 解释为错误的退出代码/错误代码,在自定义操作中意外触发回滚。如果自定义操作的完成并不重要,我会关闭错误检查以允许安装继续。在这种情况下,只会导致需要重新启动。
如果您尝试关闭或关闭的是服务,则MSI具有通过ServiceControl和ServiceInstall元素处理此问题的内置功能({ {3}})。