2010-11-25 1 views
25

In meinem Microsoft Surface Projekt, habe ich immer eine Menge folgenden Ausnahmen:Wie vermeidet man eine System.Runtime.InteropServices.COMException?

'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 

Die letzte Ausnahme ist die ganze Zeit geworfen, bis ich das Programm beenden. Ich habe bereits meinen ganzen Code auskommentiert, und ich habe die Anwendung mit nichts anderem als dem bereits eingebauten Code ausgeführt, aber das gleiche passiert.

Wie kann ich das korrigieren? Ich fand nur diese Referenz:

http://www.mobydisk.com/softdev/techinfo/dotnetexceptions.html

Es heißt es:

Die Ausnahme, die ausgelöst wird, wenn ein unerkannt HRESULT von ein COM-Methodenaufruf zurückgegeben wird.

Aber ich weiß nicht, was das bedeutet ....

==== ==== EDIT

folgte ich den Vorschlag in der Antwort unter die Ausnahme zu debuggen. Dies ist der detaillierte Bericht:

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: 

Und die debuger am Konstruktoraufruf gestoppt:

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\"); 
     } 

ich gleich zu Beginn des Konstrukteurs gestoppt:

public MainWindow() 
+1

Stellen Sie übrigens sicher, dass der gesamte Code auf die gleiche Architektur verweist. –

Antwort

32

Ihr Code (oder ein von Ihnen aufgerufener Code) ruft eine COM-Methode auf, die einen unbekannten Wert zurückgibt. Wenn du das findest, bist du halb da.

Sie könnten versuchen zu brechen, wenn die Ausnahme ausgelöst wird. Gehen Sie zu Debug> Ausnahmen ... und verwenden Sie die Suchen ... Option zu finden System.Runtime.InteropServices.COMException. Aktivieren Sie die Option zum Brechen, wenn sie ausgelöst wird, und debuggen Sie dann Ihre Anwendung.

Hoffentlich wird es irgendwo sinnvolle brechen und Sie können zurückverfolgen und finden Sie die Quelle des Fehlers.

+0

Ok danke. Das ist wirklich seltsam, da ich dies getestet habe, indem ich meinen gesamten Code kommentiert habe. Und trotzdem passiert das. Und noch etwas: Ich denke, es muss eine Drittanbieter-Bibliothek sein, die ich benutze, also wie kann ich das Problem lösen, wenn es dort ist? Nur die Ausnahme fangen? – RoflcoptrException

+0

@Roflcoptr - wenn es in der 3rd Party Code ist dann alles, was Sie tun können, ist entweder fangen oder lassen Sie es und verlassen es ist nicht wirklich eine Option. Wenn Sie es auf einen bestimmten Anruf eingrenzen können, melden Sie es dem Drittentwickler. – ChrisF

+0

Danke! Ich folgte deinem Vorschlag und debuggte mein Projekt. Ich bin immer noch sehr neugierig, da es in den Konstruktor geworfen wird, wo ich nichts geändert habe ... – RoflcoptrException

23

Ich stieß auf System.Runtime.InteropServices.COMException beim Öffnen einer Projektlösung. Manchmal hat der Benutzer nicht genug Privilegien, um einige COM Methoden auszuführen. Ich habe Visual Studio als Administrator ausgeführt und die Ausnahme war weg.

+5

Ich hatte das gleiche und ja, der Trick ist VS als Administrator auszuführen. Danke fürs Teilen, du hast mir viel Zeit gespart! –

+3

Was @ Jean-François sagte aber leider. Es hat so lange gedauert, bis ich mich entschieden habe, den Fehler zu googeln! Haha. Vielen Dank! – maxisme

+0

Dies passiert auch, wenn Sie beispielsweise Ihre Projekte von .net v.3.5 auf 4.5 ändern. Nicht, dass die Änderung an sich irrelevant ist, aber es könnte widersprüchliche Bedingungen zwischen den Framework-Versionen geben, unabhängig davon, ob VS als Administrator gestartet wurde oder nicht – netfed