2009-11-13 93 views
6

在创建我的WiX安装程序时,在安装升级程序之前尝试关闭应用程序时遇到问题。下面是我如何尝试这样做的一个例子。使用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删除的事实?我曾尝试更改序列,以便在WixCloseApplications后执行RemoveExistingProducts,但它会给我一个错误代码2613.

+2

如果你最后解释错误是什么 - 接受的答案只是建议生成一个安装日志... – 2011-01-05 08:46:34

+0

它已经很长时间了,我真的不记得完整的问题。日志记录帮助我追踪了它。这是一个序列问题,您无法在删除现有产品之前以此方式关闭该程序,但如果它正在运行,则无法删除现有产品。引导程序帮助我解决了这个问题。 – 2011-01-05 14:40:47

回答

7

您可以尝试记录安装并查看可以从那里追踪的内容。尝试从命令控制台运行安装程序,像这样:

msiexec.exe /i [msi filename] /log [filepath\logfilename.log] 
0

我会认为你需要尽早关闭在InstallExecuteSequence运行的应用程序,当然之前InstallInitialize这将启动Windows安装程序交易会对系统进行更改。

此外,您应运行相同InstallUISequence应用关闭操作以及使应用程序被关闭,同时通过安装菜单你循环交互。当您安静地安装时,整个InstallUISequence会被跳过,所以您在InstallExecuteSequence中也需要它。

请注意,您可以accidentially通过返回的退出代码/错误代码msiexec.exe的解释为错误触发回滚定制操作。如果自定义操作的完成并不重要,则关闭错误检查以允许继续安装。在这种情况下,这只会导致需要重新启动。

如果你正在尝试关闭或关闭是服务,微星内置功能通过ServiceControlServiceInstall元素(and others)来处理这个问题。