2016-07-18 31 views
2

Ich versuche COM.Scanner Projekt, aber die Folge Ausnahme ausgelöst auszuführen:.NET 0x80040154 (REGDB_E_CLASSNOTREG): Suchen Sie den COM-Klassenfactory für die Komponente mit CLSID {XXXX}

Retrieving the COM class factory for component with CLSID {9F8D4F16-0F61-4A38-98B3-1F6F80F11C87} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Wie Interop.CoreScanner ist ein .NET Assembly verwende ich regasm, um die COM-Objekte zu registrieren, aber der Fehler tritt weiterhin auf.

ich gekommen, um diese guten post aber keine Antworten zu lesen, das Problem gelöst.

Diese Informationen von Corflags:

Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.6.81.0 
Copyright (c) Microsoft Corporation. All rights reserved. 

Version : v2.0.50727 
CLR Header: 2.5 
PE  : PE32 
CorFlags : 0x1 
ILONLY : 1 
32BITREQ : 0 
32BITPREF : 0 
Signed : 0 

Die erzeugte .reg Datei mit regasm und /regfile Option ist:

REGEDIT4 

[HKEY_CLASSES_ROOT\CLSID\{9F8D4F16-0F61-4A38-98B3-1F6F80F11C87}\InprocServer32] 
"Class"="CoreScanner.CCoreScannerClass" 
"Assembly"="Interop.CoreScanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 
"RuntimeVersion"="v2.0.50727" 
"CodeBase"="file:///D:/Github/miscelaneas/COM.Scanner/libs/Interop.CoreScanner.dll" 

[HKEY_CLASSES_ROOT\CLSID\{9F8D4F16-0F61-4A38-98B3-1F6F80F11C87}\InprocServer32\1.0.0.0] 
"Class"="CoreScanner.CCoreScannerClass" 
"Assembly"="Interop.CoreScanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 
"RuntimeVersion"="v2.0.50727" 
"CodeBase"="file:///D:/Github/miscelaneas/COM.Scanner/libs/Interop.CoreScanner.dll" 

Umwelt:

  • OS: 10 Fenster (x64)
  • Visual Studio 2015

FRAGE

  • Das riecht nach, dass es fehlende Einträge auf Registry, aber ich weiß nicht, welche.
  • Wenn ich in der richtigen Weise bin, warum regasm ist nicht in der Lage, die fehlenden Registrierungseinträge zu generieren?
+3

Niemals, * nie *, ** nie ** registrieren eine Interop-Bibliothek. Sie müssen stattdessen die native COM-Komponente registrieren, indem Sie Regsvr32.exe oder (vorzugsweise) das Installationsprogramm des Herstellers verwenden. Wenn Sie dieses Installationsprogramm nicht verwenden, verwenden Sie ein Telefon. Es sieht so aus, als müssten Sie Zebra anrufen. Wenn Sie es hatten, dann haben Sie die Installation mit Regasm.exe zerstört, Sie müssen es neu installieren. –

+0

Wenn ich nicht möchte, dass die Clients ein SDK installieren, brauche ich eine native COM-Komponente und registriere sie mit Regsvr32.exe? – Joseph

+0

Verwenden Sie erneut ein Telefon, um mit dem Anbieter zu sprechen und nach einer spezifischen Installationsempfehlung zu fragen. Es ist am besten, ein Merge-Modul zu suchen, das Sie in Ihren eigenen Installer integrieren können. –

Antwort

2

Es seems, dass die fehlende Komponente zusammen mit Motorolas EMDK SDK installiert wird. Die Installation des SDK sollte Ihr Problem lösen.

Das Registrieren der Interop-Assembly führt Sie nicht weiter, da die Interop-Assembly nur eine Bibliothek mit den Typdefinitionen der COM-Komponente ist, sodass Sie Ihren C# -Code mit statischer Typisierung und früher Bindung kompilieren können. Die eigentliche Sache, die registriert werden muss, ist die zugrunde liegende COM-Komponente. Um zu registrieren, dass Sie regasm.exe nur verwenden würden, wenn die tatsächliche COM-Komponente, wenn die COM-Komponente in .NET geschrieben wurde. Andernfalls müssen Sie den Klassiker regsvr32.exe verwenden (oder das Installationsprogramm des Komponentenherstellers verwenden).

+1

Ich löste mit diesem Link. Installiere auch das Scanner SDK [hier] (https://www.zebra.com/us/en/products/software/scanning-systems/scanner-drivers-and-utilities/scanner-sdk-for-windows.html) das Problem. – Joseph