【问题标题】:Identify crash of executable run by C# Process.Start()识别 C# Process.Start() 运行的可执行文件的崩溃
【发布时间】:2016-12-01 19:32:05
【问题描述】:

我的代码:

ProcessInfo processInfo = ...
Process proc = Process.Start(processInfo);
proc.WaitForExit();
if (proc.ExitCode != 0)
{
   // ...
}

我的问题是进程(C++ 可执行文件)有时会在未知情况下由于未处理的异常而崩溃。

我可以说可执行文件崩溃了,因为在崩溃时它返回一个负退出代码(或非零)。但是,我无法创建进程转储来进行调查。

如果我至少弹出了 Windows 的“程序停止工作”消息,那么我可以手动创建转储。

当然,我可以使用像 Debug Diag 这样的软件来监控可执行文件并在崩溃时进行转储,但我宁愿拥有更通用的内部解决方案。

【问题讨论】:

    标签: c# dump exit-code unhandled-exception processstartinfo


    【解决方案1】:

    除了 stdOut 之外,您是否尝试过捕获 stdErr 输出?

    例如:

    Process installProcess = new Process 
    { 
        StartInfo = 
        {
            FileName = exeName,
            Arguments = args,
            CreateNoWindow = true,
            UseShellExecute = false,
            WindowStyle = ProcessWindowStyle.Hidden,
            RedirectStandardOutput = true,
            RedirectStandardError = true
        }
    };
    
    installProcess.Start();
    
    string processStandardOutput = installProcess.StandardOutput.ReadToEnd();
    string processStandardError = installProcess.StandardError.ReadToEnd();
    
    // Check both strings for !IsNullOrEmpty and log something of interest
    
    installProcess.WaitForExit();
    ExitCode = installProcess.ExitCode;
    
    // If ExitCode < 0, log the StandardError output...
    

    【讨论】:

      【解决方案2】:

      我认为这真的取决于被调用的可执行文件来输出错误。它是输出到窗口还是在事件查看器中放置条目等取决于相关应用程序。您应该能够阅读输出消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        • 2011-05-07
        • 1970-01-01
        • 2012-11-03
        • 1970-01-01
        • 1970-01-01
        • 2017-12-17
        相关资源
        最近更新 更多