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

时间:2014-04-16 16:49:27

标签: c# .net processstartinfo

使用这样的代码时(我没有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,我总是得到相同的异常代码(消息)。

还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

因为您使用UseShellExecuteErrorDialog而导致异常丢失,因此它们发生在Windows Shell中,而不是您的进程中,因此不会出现在.NET运行时中,因此#39} ;抓住也不例外。相反,为什么不将这两个属性都设置为false(或至少是ErrorDialog属性),捕获异常,记录它,然后显示自己的错误对话框?