Как исправить ошибку COMException 80040154?
перемещение рабочего проекта C# с 64-разрядной машины windows 7 на 32-разрядную машину XP вызвало следующую ошибку:
получение фабрики классов COM для компонента с CLSID {681EF637-F129-4AE9-94BB-618937E3F6B6} сбой из-за следующего ошибки: 80040154.
681EF637-F129-4AE9-94BB-618937E3F6B6 нет в реестре, поэтому он не установлен должным образом, но это тот же идентификатор, который ранее был проблемой на 64-разрядной машине windows 7. Решение этой ошибки на 64-разрядной машине windows 7 было найдено здесь (измените целевую платформу на x86), но это не решит проблему на 32-битной машине XP. Как найти dll, связанную с 681EF637-F129-4AE9-94BB-618937E3F6B6, или, что еще лучше, как восстановить это исключение?
4 ответов
чтобы найти 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 - ... исполняемый.
у меня была такая же проблема в службе Windows. Все ключи, где в нужном месте в реестре. Сборка службы была выполнена для x86, и я все еще получил исключение. Я узнал о CorFlags.exe
запустите это на своем service.exe
без флагов, чтобы проверить, если вы работаете под 32 бит. Если не запустить его с флагом /32BIT+ /Force
(Сила только для подписанных сборок)
Если вы повернули UAC, вы можете получить следующую ошибку:corflags : error CF001 : Could not open file for writing
Дайте пользователю полный управление сборками.
решение:
возможным обходным путем является изменение платформы вашего проекта с "любого процессора" на " X86 "(в свойствах проекта, цель сборки/платформы)
первопричины
взаимодействие VSS является управляемой сборкой с использованием 32-разрядной платформы, а dll содержит 32-разрядный COM-объект. Если вы запустите эту com dll в 64-разрядной среде, вы получите сообщение об ошибке.
переместить переменные excel, которые являются глобальными объявить в вашей форме на локальный, как в моей форме у меня есть:
Dim xls As New MyExcel.Interop.Application
Dim xlb As MyExcel.Interop.Workbook
выше двух строк были объявлены глобальными в моей форме, поэтому я переместил эти две строки в локальную функцию, и теперь инструмент работает нормально.