【发布时间】:2018-08-07 14:12:22
【问题描述】:
在我的 wix 项目中,我有一个文件“connect.exe”,通常会在卸载或更新期间运行。在卸载和主要更新期间,Wix 将在关闭前提示通常的“在继续安装之前应关闭以下应用程序。”
此对话将成功关闭程序:
Action 17:19:59: ShutdownApplications. Shutting down applications
MSI (s) (5C:44) [17:20:02:880]: RESTART MANAGER: Successfully shut down all applications in the service's session that held files in use.
MSI (c) (A4:08) [17:20:02:880]: RESTART MANAGER: Successfully shut down all applications that held files in use.
但紧接着,它会抛出一个错误,说它无法关闭应用程序:
MSI (s) (5C:44) [17:20:33:300]: Note: 1: 1611
MSI (s) (5C:44) [17:20:33:300]: Note: 1: 2205 2: 3: Error
MSI (s) (5C:44) [17:20:33:300]: Note: 1: 2228 2: 3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1611
The setup was unable to automatically close all requested applications. Please ensure that the applications holding files in use are closed before continuing with the installation.
即使应用程序已在系统上明显关闭。此外,安装程序完成更新后进行重大更新时,它不会重新启动它。
其他一切似乎都很好。
值得注意的是,connect.exe 程序运行的窗口大部分是隐藏的。它主要用作通过 Windows 系统服务运行的 service.exe 的屏幕显示。
我怎样才能解决这个问题?我没有在 connect.exe 应用程序端处理什么吗?
connect.exe 组件入口:
<Component Id="ConnectExe" Guid="..." DiskId="1">
<File Id="connect.exe" Name="connect.exe" Source="..\data\connect.exe" KeyPath="yes">
<Shortcut Advertise="yes" Description="Connect front end application." Directory="ApplicationProgramsFolder" Icon="connect.exe" Id="ConnectStartMenuShortcut" Name="Connect" IconIndex="0" WorkingDirectory="INSTALLDIR">
<Icon Id="connect.exe" SourceFile="..\data\connect.exe" />
</Shortcut>
<Shortcut Advertise="yes" Description="Connect front end application." Directory="StartupFolder" Icon="connect.exe" IconIndex="0" Id="ConnectStartupShortcut" Name="Connect" WorkingDirectory="INSTALLDIR"></Shortcut>
</File>
<RemoveFolder Id="ApplicationProgramsFolder" Directory="ApplicationProgramsFolder" On="uninstall" />
</Component>
【问题讨论】:
-
应用程序是否正确遵循重启管理器协议?为了使重启管理器工作,应用程序需要处理某些消息并及时执行此操作。例如,如果它花费太多时间处理
WM_QUERYENDSESSION/WM_ENDSESSION,重启管理器会认为它没有响应,这可能会导致您看到错误消息。此外,如果应用程序没有为重新启动注册自己,重新启动管理器将不会重新启动应用程序。见Guidelines for Applications。 -
我在完全相同的日志条目上遇到了完全相同的问题,但在我的情况下,我正在更新一个 shell 扩展。所以重启失败的不是我的程序,是explorer.exe。使得不太可能不遵循重新启动管理器协议。
-
@Krishty - 你解决了如何让 WiX 成功安装和卸载 shell 扩展吗?我真的很挣扎,在网上找不到任何好的例子。它会关闭 explorer.exe,但无法重新启动它。
-
@TimCalladene 否。即使使用手动构建的 MSI(不涉及 WiX),问题仍然存在。我的印象是,这在 WiX 和 MSI 中都不是错误,但是 MS 在安装程序服务、重新启动管理器或资源管理器中搞砸了这个问题。我对我的 shell 扩展强制重启……对用户不利,但我没有想法。
-
@TimCalladene 谢谢,但这对我来说是不可接受的,因为我必须确保我的 shell 扩展已正确加载。不过,对其他人来说可能很有趣,因此受到了好评。
标签: wix windows-installer major-upgrade wix3.11 restartmanager