Подтвердить что ты не робот

Как исправить ошибку COMException 80040154?

Перемещение рабочего проекта С# с 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 было найдено здесь (измените Цель платформы на x86), но это не решает проблему на 32-разрядной машине XP.

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

4b9b3361

Ответ 1

Чтобы найти 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.exe.

Ответ 2

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

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

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

Console output

Ответ 3

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

Возможное обходное решение - изменить вашу платформу проекта от "Любой процессор" до "X86" (в свойствах проекта, цели сборки/платформы).

ROOTCAUSE

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

Ответ 4

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

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

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