2010-06-24 77 views
3

我有一个使用WiX完成的安装程序。安装完成后,它会启动一个在Explorer进程中注入一些代码的应用程序。WiX卸载 - 在重新启动管理器之前关闭应用程序

目前,当我卸载时,重新启动管理器启动并提供关闭我的应用程序和资源管理器。而不是我想手动关闭我的应用程序(这是通过在命令行中使用-exit再次运行来完成的)。我有一个自定义操作。

这里是我试过到目前为止:

<CustomAction ExeCommand="-exit" FileKey="MyApp.exe" Id="CloseMyApp" Impersonate="yes" Return="ignore" /> 

<InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallInitialize" /> 
    <Custom Action="CloseMyApp" Before="RemoveFiles" /> 
</InstallExecuteSequence> 

这是行不通的。该操作在重新启动管理器会话之后完成。所以重新启动管理器弹出并要求关闭我的应用程序和资源管理器。该动作稍后运行,但到那时应用程序已经消失。

于是我尝试这样做:

<InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallInitialize" /> 
    <Custom Action="CloseMyApp" Before="RemoveExistingProducts" /> 
</InstallExecuteSequence> 

这也不起作用。行动已经太晚了。我还得到了“警告LGHT1076:ICE63:某些操作属于InstallInitialize和RemoveExistingProducts之间。”。

所以基本上 - 如何在卸载期间和重新启动管理器会话之前执行我的自定义操作?

我猜如果我使用Impersonate =“no”它可能会在正确的时间运行,但这不是一个选项。这是因为新进程必须针对与需要关闭的进程相同的用户运行,因为它查找窗口并发送消息。如果这些进程属于不同的用户,那么要做得更加棘手。

任何想法?

回答

5

您需要CloseMyApp自定义操作才能在InstallValidate之前运行,因为那是在处理重新启动管理器时(doc)。或者,您可以使用MSIDISABLERMRESTART或MSIRESTARTMANAGERCONTROL属性禁用重新启动管理器。

相关问题