Windows 系统下,软件在运行时通知阻止关机
官方相关文档:https://learn.microsoft.com/zh-cn/windows/win32/shutdown/shutdown-changes-for-windows-vista
https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-shutdownblockreasoncreate
首先引入 Vanara.User32 的 Nuget 包,提供 Windows API 调用(也可自行根据方法签名进行声明调用)
以 WPF 程序为例,首先在程序运行时,需要将本程序在关机时关闭的优先级提到最高()
public MainWindow()
{
InitializeComponent();
// 首先设置为系统最优先关闭的程序,第一时间拦截系统会话结束事件(注销&关机)
// 避免在关机过程中,其它程序已关闭,就剩下自己这个程序未关闭,以此产生的依赖问题
Kernel32.SetProcessShutdownParameters(0x4FF, 0);
// 监听会话结束事件,进行阻止(注销&关机)
App.Current.SessionEnding += (s, e) =>
{
// 中止程序关闭
e.Cancel = true;
// 阻止关机并说明原因(用户仍可通过“仍要关闭”继续)
User32.ShutdownBlockReasonCreate(new WindowInteropHelper(this).Handle, "你还有事情没完成,不要关机啊~~~");
// 尝试取消关机,但貌似没什么用
Process.Start("shutdown", "/a");
};
}
Vanara 参考:https://github.com/dahall/Vanara
输了你,赢了世界又如何...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2020-04-08 使用 docker 时遇到 no space left on device 问题的解决
2020-04-08 EF 数据库迁移
2013-04-08 ASP.NET WebForm的一些小问题