2016-07-18 2 views
2

я пытаюсь запустить COM.Scanner проект, но исключение последующих брошено:.NET 0x80040154 (REGDB_E_CLASSNOTREG): Получение COM фабрики классов для компонента с 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)).

Как Interop.CoreScanner является .NET assembly Я использую regasm для регистрации COM-объектов, но ошибка все еще происходит.

Я пришел, чтобы прочитать это хорошо post, но ни один из ответов не решил проблему.

Это информация о 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 

Сформированный .reg файл с regasm и /regfile опции:

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" 

Окружающая среда:

  • ОС: Windows 10 (64)
  • Visual Studio 2015

ВОПРОС

  • Это пахнет, что есть недостающие данные о реестре, но я не знаю.
  • Если у вас есть правильный путь, почему regasm не способен генерировать недочетых записей в реестре?
+3

Никогда, * никогда *, ** никогда ** не регистрируйте библиотеку interop. Вы должны зарегистрировать собственный COM-компонент, используя Regsvr32.exe или (желательно) установщик поставщика. Если у вас нет этого установщика, тогда используйте телефон, похоже, вам нужно позвонить Зебре. Если у вас это было, то использование Regasm.exe уничтожило установку, вам придется переустановить. –

+0

Если я не хочу, чтобы требования к клиенту устанавливали SDK, мне нужен собственный COM-компонент и зарегистрировать его с помощью Regsvr32.exe? – Joseph

+0

Опять же, используйте телефон, чтобы поговорить с продавцом и попросить конкретный совет по установке. Лучше всего запросить модуль слияния, который вы можете интегрировать с вашим собственным установщиком. –

ответ

2

Это seems, что недостающий компонент установлен вместе с Motorolas EMDK SDK. Установка SDK должна решить вашу проблему.

Регистрация межсетевой сборки не требует от вас каких-либо дальнейших действий, так как сборка interop - это просто библиотека, содержащая определения типа COM-компонента, так что вы можете скомпилировать свой код C# со статической типизацией и ранним связыванием. Фактическая вещь, которая должна быть зарегистрирована, является базовым компонентом COM. Чтобы зарегистрировать, что вы использовали бы regasm.exe, только если фактический COM-компонент, если COM-компонент был написан в .NET. В противном случае вам необходимо использовать классический regsvr32.exe (или использовать установщик поставщика компонентов).

+1

Я решил с этой ссылкой. Также установите SDK сканера [https://www.zebra.com/us/en/products/software/scanning-systems/scanner-drivers-and-utilities/scanner-sdk-for-windows.html), чтобы решить проблема. – Joseph

Смежные вопросы