微软实时保护导致.NET调用Process.Start时主程序锁死问题求助
问题根因
该异常由2023年推送的Windows 10安全累积更新导致,更新修改了Process.Start默认依赖的ShellExecute API执行逻辑,新增的文件关联、安全校验步骤会同步阻塞调用线程,主线程直接调用该方法就会触发主程序无响应。
可行解决方案
所有方案均无需修改客户端设备的组策略,仅需更新集成程序代码即可生效:
- 方案1:显式关闭ShellExecute调用,改用CreateProcess API启动程序,是兼容性最好的修复方案,代码示例:
// 调整前写法 // Process.Start("notepad.exe"); // 调整后写法 ProcessStartInfo processInfo = new ProcessStartInfo("notepad.exe") { UseShellExecute = false, WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.System) }; Process.Start(processInfo);
注意:该方案仅适用于直接启动exe可执行文件的场景,需要启动关联文件、自定义协议的场景请参考后续方案
- 方案2:将
Process.Start调用放到独立后台线程执行,避免阻塞UI主线程:
// 异步调用不占用主线程资源 Task.Run(() => { Process.Start("notepad.exe"); });
- 方案3:必须使用ShellExecute能力(启动关联文件、自定义协议等)时,显式关闭错误弹窗减少阻塞逻辑:
ProcessStartInfo processInfo = new ProcessStartInfo("test.txt") { UseShellExecute = true, ErrorDialog = false }; Process.Start(processInfo);
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

