try
{
object result = processClass.InvokeMethod("Create", methodArgs);
}
catch (Exception e)
{
// Here I was hoping to get an error code.
}
当我调用上面的 WMI 方法时,我预计会被拒绝访问。在我的 catch block 中,我想确保引发的异常确实是针对拒绝访问的。有什么方法可以获得它的错误代码吗?拒绝访问的 Win32 错误代码是 5。 我不想在错误消息中搜索被拒绝的字符串或类似的东西。
谢谢
最佳答案
您可以使用它来检查 Win32Exception derived exception. 的异常和内部异常
catch (Exception e) {
var w32ex = e as Win32Exception;
if(w32ex == null) {
w32ex = e.InnerException as Win32Exception;
}
if(w32ex != null) {
int code = w32ex.ErrorCode;
// do stuff
}
// do other stuff
}
从 C# 6 开始,when可以在 catch 语句中用于指定一个条件,该条件必须为执行特定异常的处理程序。
catch (Win32Exception ex) when (ex.InnerException is Win32Exception) {
var w32ex = (Win32Exception)ex.InnerException;
var code = w32ex.ErrorCode;
}
如评论中所述,您确实需要查看实际抛出的异常以了解您可以做什么,在这种情况下,特定的捕获优于仅捕获异常。像这样的东西:
catch (BlahBlahException ex) {
// do stuff
}
还有 System.Exception has a HRESULT
catch (Exception ex) {
var code = ex.HResult;
}
但是,它仅适用于 .NET 4.5 以上版本。
关于c# - 如何在 C# 中获取异常错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6893165/