c# - ¿Cómo evitar una excepción System.Runtime.InteropServices.COM?
.net wpf (2)
Me encontré con System.Runtime.InteropServices.COMException
al abrir una solución de proyecto. A veces el usuario no tiene suficientes privilegios para ejecutar algunos métodos COM
. Ejecuté Visual Studio como administrador y la excepción desapareció.
En mi proyecto Microsoft Surface, siempre recibo muchas de las siguientes excepciones:
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_32/mscorlib/2.0.0.0__b77a5c561934e089/mscorlib.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/Microsoft.VisualStudio.HostingProcess.Utilities/10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.HostingProcess.Utilities.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/Microsoft.VisualStudio.HostingProcess.Utilities.Sync/10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/Microsoft.VisualStudio.Debugger.Runtime/10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.Debugger.Runtime.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Users/Roflcoptr/Documents/Visual Studio 2008/Projects/MuReSe/MuReSe/bin/Debug/MuReSe.vshost.exe''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/System.Core/3.5.0.0__b77a5c561934e089/System.Core.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/System.Xml.Linq/3.5.0.0__b77a5c561934e089/System.Xml.Linq.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/System.Data.DataSetExtensions/3.5.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/WindowsBase/3.0.0.0__31bf3856ad364e35/WindowsBase.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_32/PresentationCore/3.0.0.0__31bf3856ad364e35/PresentationCore.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/PresentationFramework/3.0.0.0__31bf3856ad364e35/PresentationFramework.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/Microsoft.Surface/1.0.0.0__31bf3856ad364e35/Microsoft.Surface.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/Microsoft.Surface.Presentation/1.0.0.0__31bf3856ad364e35/Microsoft.Surface.Presentation.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/Microsoft.Surface.Presentation.Generic/1.0.0.0__31bf3856ad364e35/Microsoft.Surface.Presentation.Generic.dll''
The thread ''vshost.NotifyLoad'' (0x1504) has exited with code 0 (0x0).
The thread ''vshost.LoadReference'' (0x131c) has exited with code 0 (0x0).
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Users/Roflcoptr/Documents/Visual Studio 2008/Projects/MuReSe/MuReSe/bin/Debug/MuReSe.exe'', Symbols loaded.
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll''
Step into: Stepping over method without symbols ''MuReSe.App.App''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/Microsoft.Surface.Shell.ShellApi/1.0.0.0__31bf3856ad364e35/Microsoft.Surface.Shell.ShellApi.dll''
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/Microsoft.Surface.Common/1.0.0.0__31bf3856ad364e35/Microsoft.Surface.Common.dll''
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Shell.ShellApi.dll
A first chance exception of type ''Microsoft.Surface.Common.ProcessCommunicationException'' occurred in Microsoft.Surface.Shell.ShellApi.dll
A first chance exception of type ''System.Threading.WaitHandleCannotBeOpenedException'' occurred in mscorlib.dll
''MuReSe.vshost.exe'' (Managed (v2.0.50727)): Loaded ''C:/Windows/assembly/GAC_MSIL/Microsoft.Surface.Core/1.0.0.0__31bf3856ad364e35/Microsoft.Surface.Core.dll''
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.IO.FileNotFoundException'' occurred in mscorlib.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
A first chance exception of type ''System.Runtime.InteropServices.COMException'' occurred in Microsoft.Surface.Core.dll
La última excepción se lanza todo el tiempo hasta que detenga el programa. Ya comenté todo mi código, y ejecuté la aplicación con nada más que el código ya incorporado, pero sucede lo mismo.
¿Cómo puedo corregir eso? Solo encontré esta referencia:
http://www.mobydisk.com/softdev/techinfo/dotnetexceptions.html
Ahí dice:
La excepción que se produce cuando se devuelve un HRESULT no reconocido desde una llamada de método COM.
Pero no sé lo que esto significa ...
==== EDITAR ====
Seguí la sugerencia en la respuesta a continuación para depurar la excepción. Este es el informe detallado:
System.Runtime.InteropServices.COMException occurred
Message=Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
Source=Microsoft.Surface.Shell.ShellApi
ErrorCode=-2147221164
StackTrace:
at Microsoft.Surface.Shell.NativeMethods.CoCreateInstance(Guid rclsid, Object pUnkOuter, CLSCTX dwClsContext, Guid riid)
InnerException:
Y el debugador se detuvo en la llamada del constructor:
public MainWindow()
{
InitializeComponent();
// Add handlers for Application activation events
AddActivationHandlers();
// AssemblyParser parser = new AssemblyParser();
//parser.parse();
// DirSearch(@"C:/Users/Roflcoptr/Documents/Visual Studio 2008/Projects/TestClass.dll/");
}
Paré justo al comienzo del constructor:
public MainWindow()
Su código (o algún código llamado por usted) realiza una llamada a un método COM que devuelve un valor desconocido. Si puedes encontrar eso, entonces estás a mitad de camino.
Podría intentar romper cuando se lanza la excepción. Vaya a Depurar> Excepciones ... y use la opción Buscar ... para localizar System.Runtime.InteropServices.COMException
. Marque la opción para romper cuando se lanza y luego depurar su aplicación.
Con suerte, se romperá en algún lugar significativo y podrá rastrear y encontrar el origen del error.