C# System.Diagnostic.Process未返回从应用程序引发的异常

C# System.Diagnostic.Process未返回从应用程序引发的异常,c#,C#,我正在使用ssmaforacessconsole32.exe将Access数据库迁移到SQL数据库。因为我需要调用exe。我已经使用Process exeProcess=Process.StartobjPSI来启动流程。当SSMAforAccessConsole32.exe引发某些异常时,它不会返回异常 需要帮助获取exe引发的异常。任何帮助都将不胜感激 请查找下面的代码 ProcessStartInfo objPSI = new ProcessStartInfo(); objPSI.Argum

我正在使用ssmaforacessconsole32.exe将Access数据库迁移到SQL数据库。因为我需要调用exe。我已经使用Process exeProcess=Process.StartobjPSI来启动流程。当SSMAforAccessConsole32.exe引发某些异常时,它不会返回异常

需要帮助获取exe引发的异常。任何帮助都将不胜感激

请查找下面的代码

ProcessStartInfo objPSI = new ProcessStartInfo();
objPSI.Arguments = "-s " + '"' + strDir + "AssessmentReportGenerationSample.xml" + '"' + " -c " + '"' + strDir + "ServersConnectionFileSample.xml" + '"' + " -v " + '"' + strDir + strVariableFile + '"';
//objPSI.Arguments = "-s " + '"' + strDir + "AssessmentReportGenerationSample.xml" + '"' + " -c " + '"' + strDir + "ServersConnectionFileSample.xml" + '"' + " -v " + '"' + strDir + "VariableValueFileSample.xml" + '"';
objPSI.FileName = strDIR1 + "SSMAforAccessConsole32.exe";
objPSI.CreateNoWindow = true;
objPSI.UseShellExecute = false;                    
objPSI.RedirectStandardError = true;
try
{
    using (Process exeProcess = Process.Start(objPSI))
    {

        string error = exeProcess.StandardError.ReadToEnd();
        //  string strError = SSMAError.ExceptionResult.Propagate.ToString();                            
        //exeProcess.

        exeProcess.WaitForExit();                               
    }
}                 
catch (Exception ex)
{
     MessageBox.Show(ex.Message);
     // Log error.
}

是的,它不能。你为什么认为会这样?据我所知,获取异常的唯一方法是附加一个调试器,这有点棘手,而且在.NET中几乎不可能。如果需要在进程之间传递错误,异常肯定不是正确的方式:另外,StandardError.ReadToEnd将被阻止,因此不需要WaitForExit。我正在开发一个页面。根据错误,我将向用户显示一条消息,迁移是否成功。那么您是从web服务器启动进程?这听起来不是个好主意。在任何情况下,都不要使用异常在不同的进程之间传播错误,这是不可能做到的。相反,您可以通过标准错误或退出代码返回错误消息,或者,您可以将整个过程作为DLL而不是单独的EXE来编写。让我清楚地解释一下。我们需要将所有access db迁移到sql server。因此,我们使用SSMAforAccessConsole32.EXE来迁移它。但遗憾的是,此工具一次只需要一个access db进行迁移。我只是创建了一个迁移向导将多个db文件访问到SQL。如果在迁移过程中出现任何问题,必须将其传达给用户。这就是我希望恢复应用程序抛出的错误的主要原因。如果应用程序抛出异常,您将无法捕获它,就这么简单。如果应用程序传播错误的方式不同,请使用该方式。如果没有,您将不得不手动执行此操作,我猜:同时还有一些黑客选项-您可以使用事件查看器读取错误日志消息。所有.NET意外异常都会出现,您可以添加exe作为引用,并在其自己的应用程序域中直接这样运行。不过,这将是相当棘手的。