处理Process.Start()抛出的Win32Exception

时间:2016-11-27 14:08:34

标签: c# .net winapi

在某些计算机上,当我调用Process.Start()启动帮助程序可执行文件时,我得到以下异常:

System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()

问题:当我得到Win32Exception时,我想知道这是否是"文件未找到"我描述的例外或其他。如何可靠地做到这一点?我应该将此0x80004005与某些内容进行比较,还是应该解析错误消息?

一些解释:可执行文件可能由于某种原因被删除(这就是找不到文件的原因)。这是一种预期的情况。如果由于其他原因引发了异常,我想报告它。

2 个答案:

答案 0 :(得分:3)

我认为应该这样做:

public static int E_FAIL = unchecked((int)0x80004005);
public static int ERROR_FILE_NOT_FOUND = 0x2;

// When the exception is caught

catch (Win32Exception e)
{
    if(e.ErrorCode == E_FAIL && e.NativeErrorCode == ERROR_FILE_NOT_FOUND)
    {
    // This is a "File not found" exception
    }
    else
    {
    // This is something else
    }
}

E_FAIL是HRESULT value,ERROR_FILE_NOT_FOUND是system error code

不应使用错误消息,因为它依赖于文化,实际上是系统错误代码的翻译。

答案 1 :(得分:-3)

使用try-catch块来捕获“Win32Exception”并在catch块中相应地显示错误。如果要检查文件是否存在,请使用System.IO命名空间中的File.Exists()方法。我的建议是检查文件是否发生异常,并相应地显示错误消息,无论文件是否存在或进程是否无法启动。