Как исправить ошибку COMException 80040154? - PullRequest
37 голосов
/ 26 августа 2011

Перемещение рабочего проекта C # с 64-разрядного компьютера с Windows 7 на 32-разрядный компьютер с XP вызвало следующую ошибку:

Retrieving the COM class factory for component with CLSID {681EF637-F129-4AE9-94BB-618937E3F6B6} failed due to the following error: 80040154.

681EF637-F129-4AE9-94BB-618937E3F6B6 отсутствует в реестре, поэтому он не установлен должным образом, но это тот же идентификатор, который ранее был проблемой на 64-разрядной машине с Windows 7.

Было найдено решение этой ошибки на 64-разрядной машине с Windows 7 здесь (измените значение Platform Target на x86), но это не решило проблему на 32-разрядной машине с XP.

Как найти DLL, связанную с 681EF637-F129-4AE9-94BB-618937E3F6B6, или, что еще лучше, как исправить это исключение?

Ответы [ 4 ]

22 голосов
/ 26 августа 2011

Чтобы найти DLL, перейдите на ваш 64-битный компьютер и откройте реестр.Найдите ключ под названием HKEY_CLASSES_ROOT\CLSID\{681EF637-F129-4AE9-94BB-618937E3F6B6}\InprocServer32.Этот ключ будет иметь имя файла DLL в качестве значения по умолчанию.

Если вы решили проблему на своей 64-битной машине, перекомпилировав свой проект для x86, то вам нужно заглянуть в 32-битнуючасть реестра а не в обычном месте.Это HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{681EF637-F129-4AE9-94BB-618937E3F6B6}\InprocServer32.

Если библиотека DLL рассчитана на 32 бита, вы можете использовать ее непосредственно на 32-битном компьютере.Если он построен для 64-разрядных систем, вам необходимо связаться с поставщиком и получить от него 32-разрядную версию.

Если у вас есть DLL, зарегистрируйте ее, выполнив команду c: \ windows \ system32 \ regsvr32.ехе.

12 голосов
/ 11 сентября 2012

У меня была такая же проблема в службе Windows.Все ключи в нужном месте в реестре.Сборка сервиса была сделана для x86, и я все еще получил исключение.Я узнал о CorFlags.exe

Запустите это на вашем service.exe без флагов, чтобы убедиться, что вы работаете под 32-битным.Если не запустить его с флагом /32BIT+ /Force (Принудительно только для подписанных сборок)

Если у вас включен UAC, вы можете получить следующую ошибку: corflags : error CF001 : Could not open file for writing Предоставить пользователю полный контроль над сборками.

Console output

9 голосов
/ 24 февраля 2015

Временное решение:

Возможный обходной путь - изменить платформу вашего проекта с «Любой ЦП» на «X86» (в Свойствах проекта, Цель сборки / Платформы)

ROOTCAUSE

VSS Interop - это управляемая сборка, использующая 32-битную платформу, а DLL содержит 32-битный COM-объект. Если вы запустите эту COM-библиотеку в 64-битной среде, вы получите сообщение об ошибке.

0 голосов
/ 17 августа 2016

Переместите переменные Excel, которые глобально объявлены в вашей форме, в локальные, как в моей форме:

Dim xls As New MyExcel.Interop.Application  
Dim xlb As MyExcel.Interop.Workbook

выше две строки были объявлены глобальными в моей форме, поэтому я переместил эти две строки в локальную функцию, и теперь инструмент работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...