try
{
object result = processClass.InvokeMethod("Create", methodArgs);
}
catch (Exception e)
{
// Here I was hoping to get an error code.
}
当我调用上述 WMI 方法时,预计会出现“访问被拒绝”的情况。在我的 catch 块中,我想确保引发的异常确实是针对“访问被拒绝”。有什么方法可以获取它的错误代码吗?拒绝访问的 Win32 错误代码是 5。
我不想在错误消息中搜索被拒绝的字符串或类似的内容。
Thanks
您可以使用它来检查异常和内部异常Win32Exception 派生异常。 http://msdn.microsoft.com/en-us/library/system.componentmodel.win32exception.aspx
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 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/when可以在 catch 语句中使用来指定一个条件,对于要执行的特定异常的处理程序来说,该条件必须为真。
catch (Win32Exception ex) when (ex.InnerException is Win32Exception) {
var w32ex = (Win32Exception)ex.InnerException;
var code = w32ex.ErrorCode;
}
正如在评论中一样,您确实需要查看实际抛出的异常以了解您可以做什么,在这种情况下,特定的 catch 优于仅捕获 Exception。就像是:
catch (BlahBlahException ex) {
// do stuff
}
Also System.Exception 有一个 HRESULT http://msdn.microsoft.com/en-us/library/system.exception.hresult.aspx
catch (Exception ex) {
var code = ex.HResult;
}
但是,它仅适用于 .NET 4.5 及以上版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)