问题标签 [windows-restart-manager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
606 浏览

windows - Windows Installer 如何在卸载期间关闭应用程序?

卸载我的应用程序时,如果它正在运行,它会尝试停止它:

在此处输入图像描述

可悲的是,自动关闭并没有真正起作用,它显示了这个错误:

在此处输入图像描述

我的应用程序消失了,窗口、托盘栏图标都消失了。但我仍然可以在进程列表中看到它们。

我猜 Windows 会向应用程序发送一个信号以正常退出并且 UI 会这样做,但是有一些挥之不去的线程阻止进程终止。

Windows Installer 如何在卸载期间关闭应用程序?

一旦我知道这一点,我想在调试我的应用程序时模拟它以查看发生了什么。这是一个合理的计划吗?

0 投票
0 回答
268 浏览

java - 如何将布尔值作为 WinDef.LRESULT 返回?

我正在尝试在我的 Java 程序上实现 Windows重新启动管理器,然后我收到了来自 Windows 的消息并执行如下所示的回调:

WindowProc看起来像这样:

根据应用程序的重新启动管理器指南

重新启动管理器通过发送将 lParam 参数设置为 ENDSESSION_CLOSEAPP (0x1) 的 WM_QUERYENDSESSION 通知来查询 GUI 应用程序是否关闭。[...] GUI 应用程序应监听 WM_QUERYENDSESSION 消息,如果应用程序准备关闭并重新启动,则返回 TRUE 值。[...]

true当返回值为 a 时,我如何实际返回WinDef.LRESULT?我认为它是一个指针,不知何故我需要构造一个 Win32 布尔值并返回一个指向它的指针?

0 投票
1 回答
136 浏览

windows - 如何捕获哪些 dll 导致服务器意外重启

我有一个 Windows Server 2012 R2。当我安装 msi 时,Windows 安装程序会提示我系统将在 60 秒后重新启动。我怎样才能捕捉到哪些 dll 正在强制机器重新启动?或者我们如何在文件夹级别提供句柄以了解哪些 dll 是强制重启的罪魁祸首?

我试过这个Get-EventLog -Logname System -Newest 1 -Source “USER32” | Format-List 这仅输出有关进程、时间、用户名等的信息。我想知道问题背后的特定 dll 名称。我怎样才能做到这一点?

在此先感谢您的帮助!

0 投票
0 回答
216 浏览

wix - 为 Wix 安装程序部分本地化重新启动管理器对话框

我们有一个产品的旧版 InstallShield 安装程序,我们正在将该产品移植到 wix 安装程序。

我仅在 ARP 卸载期间观察到重新启动管理器对话框中的本地化不当行为,其中只有描述部分正在本地化,而单选按钮下方的文本未本地化。最后截图。

但是在 InstallShield 安装程序中它是正确的。对于这种不一致的行为,我无法追踪我的 wix 安装程序中缺少的内容。

我尝试检查此重新启动管理器对话框本地化字符串是否来自 Wix 或操作系统。

我尝试检查此对话框字符串是否在 InstallShield 安装程序的字符串表中可用,但找不到。Wix 中的 WixUI_en-us.wxl 中都没有。

所以我的理解是这个对话框来自操作系统,但问题是为什么它只部分本地化。

我在我的安装程序中自定义了“WixUI_InstallDir”,如下所示。

所以我在 WixUI_InstallDir1 中包含了下面的 MsiRMFilesInUse 对话框。

通过包含此内容,“正在使用的文件”对话框可见并在从 MSI 卸载时进行本地化,但从 ARP 卸载时重新启动管理器部分本地化。

我希望重新启动管理器对话框完全本地化,但下面的单选按钮文本没有本地化。下面附上截图。

在此处输入图像描述

0 投票
2 回答
436 浏览

winapi - 在什么情况下 RmGetList 为 lpdwRebootReasons 输出参数返回 2?

背景

我正在设计一个 Inno Setup 安装程序来安装Cygwin服务,我对从 Windows重新启动管理器API 看到的行为感到困惑。

具体来说,当服务正在运行(使用cygrunsrv实用程序启动)时,RmGetList API 函数RmRebootReasonSessionMismatch为其lpdwRebootReasons输出参数返回 2 ( )。这个输出参数是一个类型的枚举,RM_REBOOT_REASONMSDN上对该RmRebootReasonSessionMismatch值的描述是:

Inno Setup 日志文件包含如下行:

Inno Setup 然后继续尝试替换正在使用的文件,就好像根本没有使用 Restart Manager。

我对这个输出值感到困惑,因为在我测试的两台不同的机器上(Windows 10 1909 x64 和 Windows Server 2012 R2),没有终端服务器/远程桌面用户登录。

如果我停止服务并启动另一个可执行文件(在要被安装程序替换的文件集中),RmGetList 返回 0 ( RmRebootReasonNone) lpdwRebootReasons,Inno Setup 显示正在使用的文件的正常对话框并允许用户选择自动关闭它们。

Process Explorercygrunsrv.exe显示在会话 0 和System完整性级别中运行的两个进程(及其启动的进程)。两者都是控制台子系统可执行文件。

问题

  1. RmGetList 在什么条件下RmRebootReasonSessionMismatch为其lpdwRebootReasons输出参数返回 2 ( )?(我试图理解为什么在服务运行时会发生这种情况。)

  2. 此值是否会导致整个 Restart Manager 会话失败,或者即使 Restart Manager 认为应用程序正在一个或多个不同的会话中运行,它是否可以继续?

0 投票
1 回答
416 浏览

inno-setup - How do you close then restart explorer.exe in Inno Setup uninstall using the Restart Manager?

Does anyone know of a sample or can provide a sample of how to use the Restart Manager built-in to Windows to close explorer.exe at the beginning of the uninstall process of Inno Setup then restarting it just after files removed ? I have some shell items that even after unregistered is still allocated and can't be removed until explorer.exe is closed.

TIA!!

0 投票
1 回答
523 浏览

c++ - 为所有进程刷新系统环境变量而无需在 C++ 中注销/重新启动

我正在用 C++ 编写一个程序,它将一个新目录添加到系统的路径环境变量中。该目录已成功添加该RegSetValueEx()功能,但更改并未反映在所有进程中。

我已经尝试过BroadcastSystemMessage(),并且SendMessageTimeout()功能如下

但是它们都不起作用,但是当我重新启动系统时,更改就会反映出来。

我想要的是

我希望在没有注销的情况下反映所有进程的更改,并且几天前我安装了一个软件(Composer https://getcomposer.org),它添加了它的环境路径并刷新了所有进程的环境变量,而不需要系统重启。

这是我已经查看过的一些有用的链接