I apologize for not answering sooner; this was due to being out of office.
I cannot imagine a situation in which you cannot obtain the inner exception, at least using a debugger - but it should also be possible from the code. Each exception has an InnerException property, so you get it from there. The program cannot just "hang" with no further info obtainable - if it appears so, it must be waiting somewhere, and that can be discovered and possibly resolved - but that's your task, really.
There is no full list of possible errors, due to the complexity of the system and (dynamic) number of component involved. But the exception itself - or its InnerException - gives the information, so you need to get that info first.
Thanksfully, at least the numerical error code is include in the outer exception message. The particular error codes correspond to:
((HRESULT)0xC0049006L):
Server shut down. The OPC server indicated that it needs to shutdown. The application is releasing all connections and interfaces for this server. The application will try to reconnect to the server after a configurable period.
I think this is descriptive enough.
and
((HRESULT)0xC004C014L):
Value has bad quality.
This error is generated when the code calls a method such as ReadItemValue (or ReadMultipleItemValues), but the Value-Timestamp-Quality triple returned by the OPC Server indicates a Bad quality, thus no valid Value is actually present.
Best regards