如何用C#取消Windows关机?调用shutdown /a命令无效问题
阻止Windows关机的正确实现方式
你的代码问题在于调用shutdown /a的时机太晚——当FormClosing事件触发时,系统关机流程已经启动,外部命令很难中断这个过程。正确的做法是直接利用FormClosingEventArgs的Cancel属性来取消窗体关闭,进而阻止系统关机。
修改后的代码如下:
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.WindowsShutDown) { MessageBox.Show("正在取消Windows关机"); // 直接取消关闭操作,阻止系统关机 e.Cancel = true; } }
补充说明
- 这种方式是.NET框架提供的原生阻止关机机制,比调用外部命令更可靠、及时。
- 确保程序以管理员身份运行,避免因权限不足导致操作失效。
- 若需要在阻止关机后执行额外操作(如保存数据),可在设置
e.Cancel = true后添加对应逻辑。
内容的提问来源于stack exchange,提问作者papi_2sa
相关产品推荐
相关产品推荐

