2

我们有一个 C# VS2010 应用程序在 Windows 2000 Server 机器(还有一个 Windows 2003 Server 机器)上运行,几乎是唯一运行的应用程序。

我们从盒子中移除电源。有一个持续时间很短的电池(可能需要 3 分钟的电量),然后等待 10 秒,然后确定事情正在下降并通知 Windows 它需要关闭。

Windows 向应用程序发送一个 CTRL_SHUTDOWN_EVENT 事件,并尝试阻止 Windows 关闭一段时间以让另一台与之通信的计算机在第一台计算机上执行一些文件工作。它通过一个定时循环来做到这一点,在循环结束后,它会优雅地退出并关闭计算机。

不错的计划,但它不起作用。该应用程序可能达到 20 秒,并且该应用程序被 Windows 强行杀死,Windows 关闭。在 90 秒时,运行电池的硬件固件会关闭计算机的电源。

我试图找出如何推迟 Windows 一段时间。我尝试创建(它不存在)HKEY_LOCAL_MACHINE 子树:\SYSTEM\CurrentControlSet\Control\WaitToKillAppTimeout 注册表项为 60000,但尽管它似乎阻止了弹出窗口的发生,但 Windows 本身在大约相同的时间死亡——我们在没有机会优雅地关闭自己的情况下思考。也许注册表项有效但还不够。

基本上,我有一个“不礼貌”的应用程序,它拒绝关闭(出于最好的原因)并且没有注册表项,Windows 最终还是将其关闭,然后自行关闭。

随着注册表的更改,我们认为正在发生的事情是 Windows 没有关闭应用程序,但 Windows 本身在没有关闭的情况下突然被杀死,但电源仍然没有拉动大约一分钟,然后电源被拉动。

所以也许我们在这里有层次。首先是应用程序尝试保持打开状态的时间。然后是 Windows 准备允许它保持打开多长时间。然后是......一些东西......它杀死了窗户。然后是功率损耗。

任何人都知道我们如何让窗户保持打开状态并运行到 70 秒而不是大约 20 秒?我们的注册表项是否正确,但还不够?我们是否需要设置一些额外的键来确定 Windows 在收到关闭通知后多长时间才会自行杀死?

提前致谢。

4

0 回答 0