如何在C# ASP.NET中启动MdSched.exe自动选择立即重启执行测试
可行解决方案
方案1:使用MdSched.exe原生命令行参数(优先推荐)
MdSched.exe本身支持静默运行参数,无需额外模拟交互即可实现需求:
- 调用时传入
/quiet参数即可完全跳过GUI交互,静默配置下次系统重启时自动运行内存诊断 - 如果需要实现和「立即重启并运行测试」完全一致的效果,配置完成后额外调用系统重启命令即可
注意:该操作需要进程持有管理员权限才可正常执行,否则会触发权限不足报错
C# 调用代码示例:
using System.Diagnostics; public void RunMemoryDiagnosticWithAutoRestart() { // 静默配置内存诊断任务 ProcessStartInfo mdSchedInfo = new ProcessStartInfo { FileName = "MdSched.exe", Arguments = "/quiet", UseShellExecute = true, Verb = "runas" // 自动请求管理员权限 }; Process.Start(mdSchedInfo).WaitForExit(); // 立即重启系统,不需要重启可删除下面这段 ProcessStartInfo shutdownInfo = new ProcessStartInfo { FileName = "shutdown.exe", Arguments = "/r /t 0", UseShellExecute = true, Verb = "runas" }; Process.Start(shutdownInfo); }
方案2:直接修改注册表配置诊断任务
MdSched.exe的本质是修改系统注册表项配置诊断计划,你也可以直接操作注册表实现相同效果,全程无GUI弹出:
注意:修改HKLM路径下的注册表同样需要管理员权限
C# 操作代码示例:
using Microsoft.Win32; using System.Diagnostics; public void ConfigMemoryDiagnosticByReg() { using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Memory Diagnostics", true)) { if (key != null) { // 赋值1 = 下次重启执行标准内存诊断,赋值2 = 下次重启执行高级诊断 key.SetValue("Schedule", 1, RegistryValueKind.DWord); } } // 需要立即重启则放开下面注释 // Process.Start(new ProcessStartInfo("shutdown.exe", "/r /t 0") { UseShellExecute = true, Verb = "runas" }); }
方案3:模拟GUI交互(不推荐,兼容性差)
如果必须走启动GUI再模拟点击的路径,可以通过Windows API的FindWindow、SendMessage等方法定位弹窗、模拟按钮点击,该方案依赖不同系统版本下窗口标题、按钮控件ID的固定值,兼容性较差,仅做备选。
内容的提问来源于stack exchange,提问作者Stratofighter
相关产品推荐
相关产品推荐

