我的程序如何知道Windows已重新启动以进行更新

时间:2016-12-14 20:26:49

标签: c# winapi

当Windows自动安装更新并自动重新启动时,某些程序(如Microsoft Word)会自动恢复并恢复其原始状态(Word将打开之前打开的相同文档)。我的程序如何做到这一点?有API吗?

如果是常规的用户启动重启,我不希望我的程序自动返回 - 这对用户来说看起来很奇怪。但是如果用户在睡觉时让我的程序打开并且Windows在半夜重新启动更新,我希望用户早上回到他们的计算机并仍然看到我的程序正在运行。

我关心Window 7及以上版本。我将问题标记为C#,因为这是我正在使用的语言,但如果有一个C / C ++解决方案,我会编写适当的粘合代码并将其发布在此处供其他人使用。

1 个答案:

答案 0 :(得分:2)

从vista开始我们可以用于这个单一的电话

RegisterApplicationRestart (L"some cmd line", RESTART_NO_CRASH|RESTART_NO_HANG);

如果我们在XP下运行,我们可以(如@GSerg建议的那样)用

监听WM_ENDSESSION消息

wParam != 0 && (lParam & ENDSESSION_CLOSEAPP) != 0

并在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce下注册自我重启(但不在Run下!)

explorer.exe任何下一次启动时通过删除值键和exec应用程序来处理它。