当ProcessStartInfo ErrorDialog=true时,正在获取原始异常

本文关键字:获取 原始 异常 ProcessStartInfo ErrorDialog true | 更新日期: 2023-09-27 17:58:49

当使用这样的代码时(我没有excel.exe的权限,这是故意的):

ProcessStartInfo psi = new ProcessStartInfo("EXCEL.exe");
psi.UseShellExecute = true;
psi.ErrorDialog = true;
Process.Start(psi);

我得到了一个很好的Windows错误对话框,其中包含关于缺少权限的适当消息。这是100%好的,但只有当我不想记录这个错误时。

假设我想使用以下代码记录它:

try
{
    ProcessStartInfo psi = new ProcessStartInfo("EXCEL.exe");
    psi.UseShellExecute = true;
    psi.ErrorDialog = true;
    Process.Start(psi);
}
catch(Win32Exception ex)
{
    LogError(ex.Message) //FAIL! "The operation was canceled by the user" instead of "Access denied"
}

看起来原始的异常已经丢失,无论我是否没有权限或安装了excel,我都会得到相同的异常代码(消息)。

还有别的办法吗?

当ProcessStartInfo ErrorDialog=true时,正在获取原始异常

由于您使用的是UseShellExecuteErrorDialog,所以异常会丢失,因此它们发生在Windows Shell中,而不是您的进程中,因此也不会发生在.NET运行时中,因此没有异常可捕获。相反,为什么不将这两个属性都设置为false(或至少ErrorDialog属性),捕获异常,记录它,然后显示自己的错误对话框呢?