在卸载期间提示用户关闭应用程序(在 WiX 中)
Posted
技术标签:
【中文标题】在卸载期间提示用户关闭应用程序(在 WiX 中)【英文标题】:Prompt user to close application during uninstall (in WiX) 【发布时间】:2010-10-17 04:11:48 【问题描述】:我正在使用 Windows Installer XML 3.0 (WIX3) 安装一些软件。
一切正常,但是,我很难处理以下用例:当用户尝试卸载时,已安装的软件仍在运行 > 它。默认行为似乎删除了所有文件,但允许应用程序运行(在我的情况下很难看到,因为它位于任务托盘中)。
我在installer.wxs
文件中添加了以下代码:
<InstallExecuteSequence>
<Custom Action="WixCloseApplications" Before="RemoveFiles" />
</InstallExecuteSequence>
<util:CloseApplication Id="CloseFoobar"
CloseMessage="no"
Description="FooBar is still running!"
ElevatedCloseMessage="no"
RebootPrompt="no"
Target="foobar.exe" />
但这不起作用 - 更糟糕的是,它会显示一个对话框,要求在安装期间重新启动!
正确的做法是什么?
【问题讨论】:
【参考方案1】:据我所知,在您的 UI 中添加以下引用就足够了:
<DialogRef Id="FilesInUse" />
<DialogRef Id="MsiRMFilesInUse" />
CloseApplication 的东西只用于在安装过程中关闭应用程序,但它有问题(至少当我几个月前尝试过时,现在可能已经修复了?)
不幸的是,这又是一个非常糟糕的 WiX 文档示例,甚至没有记录像这样的标准安装/卸载场景。
【讨论】:
感谢您的回答!我尝试过这种方式,但它对我不起作用。根据 MSDN,这两个对话框也仅在安装期间显示,在卸载期间不进行评估! 是的,CloseApps 可能需要加强处理所有这些情况。它还不能处理所有场景。 @RobMensching CloseApplication 现在更好了吗?【参考方案2】:几天前在 wix-users 邮件列表上提出了一个类似的问题。那里给出的答案是:
这就是 Windows 的工作方式 预 Vista 和重新启动管理器。那里 必须是***窗口 可用的。托盘中的应用程序没有 数。
wix-users archive 中也有一些关于该主题的主题。
【讨论】:
【参考方案3】:您能否检查卸载日志 (here is how to enable them),据我所知,Windows Installer 会将您的文件置于删除挂起状态并在最后要求重新启动。 您还可以编写一个简单的自定义操作来终止您的进程。
【讨论】:
【参考方案4】:有关如何使用 closeapplication 的示例,请点击此链接: wix github project, unit tests
要显示提示对话框,您可以使用:
<util:CloseApplication Id="CloseIE" Target="iexplore.exe" PromptToContinue="yes" Description="Test" />
【讨论】:
【参考方案5】:Shay 的回答是正确的。最新版本的 Windows Installer 就是这样运行的。 Windows Installer 费了很大的力气来确保您可以通过重新映射正在使用的 Dll 等来避免在卸载时重新启动。通常,正在运行的应用程序可以在卸载后继续运行,并且在应用程序时会进行一些清理关机,下次重启后剩下的。关键是,如果 Windows Installer 可以将正在使用的二进制文件移动到另一个位置,保持任何应用程序运行,并替换正在使用的应用程序(但重新映射内存支持),那么所需要做的就是删除一些非必要的垃圾在下次重新启动时,为什么要强制重新启动?无需显示正在使用的文件对话框,因此不会出现这种情况。
如果应用尝试访问已卸载的文件,这可能会导致问题,但我认为风险很低。如果应用程序需要知道正在进行卸载,那么与重新启动管理器集成应该可以工作 - Windows 会告诉它正在进行卸载。否则,Shay 是正确的。如有必要,编写卸载自定义操作以告知应用关闭。
【讨论】:
【参考方案6】:我也遇到过这个问题。 将 Before 属性更改为“InstallValidate”对我有用。
<Custom Before="InstallValidate" Action="WixCloseApplications"/>
【讨论】:
以上是关于在卸载期间提示用户关闭应用程序(在 WiX 中)的主要内容,如果未能解决你的问题,请参考以下文章