【问题标题】:wix Restart Manager successfully shuts down application but says it couldn'twix Restart Manager 成功关闭应用程序但说它不能
【发布时间】: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


【解决方案1】:

改进了吗?Different ways to create and interpret MSI logs.


日志文件:日志文件的其余部分说明了什么?有没有提到其他被锁定的文件? Some logging and log-file interpretation hints can be found here.

如果您在重启管理器中发现错误,我不会感到惊讶。虽然是一个相对简单的概念,但它涉及一些非常复杂的东西。 隐藏的窗口正是这种复杂性的根源。

快速提问


一些链接

【讨论】:

  • 这个答案非常惊人。我的应用程序是基于 Qt 构建的。但我正在监听 WM_QUERYENDSESSION 和 WM_ENDSESSION 事件。应用程序没有得到任何一个。托盘图标消失了,但我的应用程序并没有停止运行。不确定正在向我的应用程序发送哪些其他消息会杀死系统托盘图标但应用程序不会退出。
  • 我也认为这是一个重启管理器错误。我在重新启动 explorer.exe 以安装 shell 扩展时遇到了同样的问题,它失败并显示完全相同的错误消息。 explorer.exe 显然是 RM 兼容的,并且在 Windows 7 上运行流畅(我刚刚测试过)。我还根据this answer 尝试了MSIDISABLERMRESTART=0 MSIRMSHUTDOWN=2 MSIRESTARTMANAGERCONTROL=0,但没有运气。我假设 Windows 10 重新启动管理器在许多情况下都被破坏了。
猜你喜欢
  • 2022-01-20
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
相关资源
最近更新 更多