9

一些解释:对于我正在处理的项目,我必须编写一个在后台运行的程序,检测文件的更改,并将修改后的文件上传到 Web 服务以使其可供其他人使用。如果不是用户修改大文件并决定在编辑后立即关闭计算机的情况,那么同步非常简单。

我可以取消上传并等待下一次重新启动进行上传,但我可以想象用户第二天早上将文件从网络下载到另一台计算机并且不明白为什么他昨晚的更改不存在。

所以我的想法是检测用户何时注销或重新启动 Windows,如果我正在上传,只需询问用户“我们仍在同步Foo.txt您刚刚更改的文件。您确定要重新启动? 在您重新启动计算机之前,您所做的更改将无法提供给其他人使用!”。如果用户说不,我需要取消重启/注销

这可能吗?

4

3 回答 3

10

有一个名为的静态类SystemEvents公开了这种行为:

http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.aspx

但是,它无法区分某些操作,也不会暂停操作系统进程超时保护。我用过一次,但注册表中配置的默认超时时间有点短,因此可能需要增加。

长话短说,这一切都让人觉得有点生硬。

于 2011-01-06T17:13:58.383 回答
4

要添加到@Adam 的答案,如果您需要区分注销和关闭/重启之间的区别,您可以处理WM_QUERYENDSESSION消息。

Windows Vista 的关机更改”是了解关机超时的有用文章。

于 2011-01-06T17:21:22.847 回答
3

如今,试图阻止关机是一个有损的提议,在 Vista 及更高版本中不再可能这样做。提示既不可读也不可达。此处高度指示使用服务,让您在用户注销后幸存下来。重新启动后,您的服务将自动重新开始运行,让您完成工作。

于 2011-01-06T18:17:54.840 回答