‘Process finished with exit code 500’报错原因及解决咨询
进程启动后立即退出,返回退出码500的排查与解决
问题描述
运行App1启动App2.exe时,App2迅速自行退出,返回提示:Process finished with exit code 500,搜索引擎未找到该退出码的公开相关信息。相关代码如下:
App1 代码
using System.Diagnostics; var app2 = new Process() { StartInfo = { FileName = "App2.exe", UseShellExecute = false, CreateNoWindow = false } }; app2.Start();
App2 代码
while (true) { string input = Console.ReadLine(); Console.WriteLine("Input is " + input); }
原因分析
退出码500并非Windows系统标准错误码,大概率是App2启动失败时抛出未处理异常,进而返回的自定义退出码。结合代码场景,核心问题在于:当UseShellExecute = false时,控制台程序App2的标准输入流未被正确关联,导致Console.ReadLine()尝试读取输入时直接触发异常,最终进程异常退出并返回500码。
解决方案
针对这个问题,有两种可行的解决思路:
方案1:启用ShellExecute
将UseShellExecute设置为true,让系统Shell负责进程启动,自动完成控制台输入流的关联:
var app2 = new Process() { StartInfo = { FileName = "App2.exe", UseShellExecute = true, // 修改为true CreateNoWindow = false } }; app2.Start();
方案2:手动重定向输入流(适合需要自定义交互的场景)
如果必须保持UseShellExecute = false,需要显式开启标准输入重定向,确保App2能获取输入流:
var app2 = new Process() { StartInfo = { FileName = "App2.exe", UseShellExecute = false, CreateNoWindow = false, RedirectStandardInput = true // 开启输入重定向 } }; app2.Start(); // 若需要交互,可通过以下方式向App2写入输入 // app2.StandardInput.WriteLine("test input");
另外,也可以在App2中添加异常捕获逻辑,避免进程直接崩溃,方便后续排查问题:
while (true) { try { string input = Console.ReadLine(); Console.WriteLine("Input is " + input); } catch (Exception ex) { Console.WriteLine($"启动异常:{ex.Message}"); // 可自定义退出码或选择继续运行 // Environment.Exit(1); } }
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

