try { object result = processClass.InvokeMethod("Create", methodArgs); } catch (Exception e) { // Here I was hoping to get an error code. }
When I invoke the above WMI method I am expected to get Access Denied. In my catch block I want to make sure that the exception raised was indeed for Access Denied. Is there a way I can get the error code for it ? Win32 error code for Acceess Denied is 5. I dont want to search the error message for denied string or anything like that.
Thanks
As such, C programming does not provide direct support for error handling but being a system programming language, it provides you access at lower level in the form of return values. Most of the C or even Unix function calls return -1 or NULL in case of any error and set an error code errno.
C doesn't support exception handling.
You can use this to check the exception and the inner exception for a 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 }
Starting with C# 6, when can be used in a catch statement to specify a condition that must be true for the handler for a specific exception to execute.
catch (Win32Exception ex) when (ex.InnerException is Win32Exception) { var w32ex = (Win32Exception)ex.InnerException; var code = w32ex.ErrorCode; }
As in the comments, you really need to see what exception is actually being thrown to understand what you can do, and in which case a specific catch is preferred over just catching Exception. Something like:
catch (BlahBlahException ex) { // do stuff }
Also System.Exception has a HRESULT
catch (Exception ex) { var code = ex.HResult; }
However, it's only available from .NET 4.5 upwards.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With