C#怎么实现系统的关机和重启_C#如何执行CMD命令【干货】

张开发
2026/4/21 9:33:53 15 分钟阅读

分享文章

C#怎么实现系统的关机和重启_C#如何执行CMD命令【干货】
必须使用 shutdown 命令关机/重启推荐 Process.Start 配合 UseShellExecutefalse、CreateNoWindowtrue 和错误重定向需检查 ExitCode 判定成败权限不足时不会抛异常。关机/重启必须用 Shutdown 命令Process.Start(shutdown) 是最可靠方式Windows 系统级关机或重启不能靠 .NET 的 Environment.Exit 或 Application.Exit —— 那只是退出当前程序。真正生效的只有调用系统 shutdown 命令。直接拼接参数比用 WMI 或 P/Invoke 更稳定、权限要求更低、兼容 Win7 到 Win11。shutdown /s /t 0 立即关机/s 表示 shutdown/t 0 表示延迟 0 秒shutdown /r /t 0 立即重启/r 表示 restart加 /f 强制关闭正在运行的应用如弹窗未响应时必需shutdown /s /f /t 0避免用 /l注销它不等于关机且在服务上下文中可能失败执行 CMD 命令要用 ProcessStartInfo 配置否则容易静默失败直接 Process.Start(shutdown, /s /t 0) 在某些环境如无桌面会话的服务、UAC 提权后会卡住或没反应。根本原因是没显式指定 UseShellExecute false 和 CreateNoWindow true导致命令在隐藏 shell 中无法正确继承权限或输出流。必须设 UseShellExecute false否则参数会被忽略或解析错推荐设 CreateNoWindow true避免闪黑窗若需调试可临时设为 false 观察报错加 RedirectStandardError true 并读取 StandardError能捕获如“拒绝访问”“参数错误”等真实原因示例关键片段var startInfo new ProcessStartInfo(shutdown, /s /f /t 0){ UseShellExecute false, CreateNoWindow true, RedirectStandardError true};using var proc Process.Start(startInfo);string error proc.StandardError.ReadToEnd();proc.WaitForExit();权限不足时会直接失败没有异常抛出——必须检查退出码和错误输出shutdown 是受保护操作普通用户默认只能对自己会话执行注销关机/重启需要“关机系统”权限。这权限通常只对管理员组或明确赋权的账户开放。而 .NET 的 Process.Start 即使失败也常返回非空 Process 对象且不抛异常极易误判成功。 唱鸭 音乐创作全流程的AI自动作曲工具集 AI 辅助作词、AI 自动作曲、编曲、混音于一体

更多文章