C# - 如何检测Windows关闭/注销并取消该操作(在询问用户之后)

Séb*_*mer 9 .net c# windows system-shutdown

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

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

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

这可能吗?

Ada*_*rth 9

有一个名为的静态类SystemEvents暴露了这种行为:

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

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

长话短说,这一切都让人觉得有点ha ..