Frage Instanziieren einer COM-Komponente schlägt fehl mit "Klasse nicht registriert", wenn "als Administrator ausführen"


Beim Instanziieren eines COM-Interop-Objekts:

var comObj = new ComComponentClass();

Ich bekomme die COMException:

Retrieving the COM class factory for component with CLSID 
{C343ED84-A129-11D3-B799-0060B0F159EF} failed due to the following error: 
80040154 Class not registered 
(Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

ich nur Erhalte diesen Fehler, wenn ich meine Anwendung mit starte Als Administrator ausführen. Wenn ich normal laufe, tritt der Fehler nicht auf.

Anmerkungen:

  • Die Anwendung ist eine 64-Bit-Anwendung.
  • Die COM-Komponente ist ein Inproc-Server in einer 64-Bit-DLL.

Irgendwelche Ideen, wo ich anfangen sollte zu untersuchen, warum dieser Unterschied auftritt?

Was ich versucht habe:

Ich habe Procmon verwendet, um zu beobachten, welche Registrierungsschlüssel untersucht werden.

  • In beiden Fällen wird die entsprechende DLL durch Überprüfen des Schlüssels gefunden HKCU\Software\Classes\CLSID\{C343ED84-A129-11d3-B799-0060B0F159EF}\InprocServer32
  • In beiden Fällen fragt es den Schlüssel ab HKCR\CLSID\{C343ED84-A129-11D3-B799-0060B0F159EF} und kommt zurück NAME NOT FOUND. Was ich seltsam finde (da ich den Schlüssel mit benutzen kann regedit.exe. Aber da dies zwischen den beiden Szenarien nicht unterschiedlich ist, schien es nicht wichtig.

5
2018-03-25 15:25


Ursprung


Antworten:


Sie haben das Objekt für Ihren lokalen Benutzeraccount ohne Administratorrechte registriert, anstatt von einem administrativen Prozess. Aus diesem Grund wird die COM-Komponente im benutzerspezifischen Bereich der Registrierung registriert (wie Sie selbst angegeben haben: HKC *U*).

Wenn ein Prozess ohne Administratorrechte ausgeführt wird, wird eine zusammengesetzte Ansicht der HKCR-Registrierung angezeigt, die alle HKCU \ Software \ Classes-Einträge und alles in HKLM \ Software \ Classes enthält, das in HKCU \ Software \ Classes nicht überschrieben wurde . Wenn ein Prozess als Administrator ausgeführt wird, zeigt die Registrierung nur die HKLM \ Software \ Classes-Einträge an.

Siehe diesen Link für weitere Details: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724498(v=vs.85).aspx

Das Seltsame ist, dass RegSvr32 nicht unter dem Schlüssel HKCU \ Classes registriert wird. Wenn Sie es ohne Administratorrechte ausführen, wird es nur fehlschlagen (nur überprüft, um sicherzustellen, in Windows 7). Wie wurde die COM-Komponente registriert?


4
2018-03-25 18:53