Windows 7 64-разрядная проблема с загрузкой OCX - PullRequest
1 голос
/ 14 июля 2011

У меня есть приложение .NET 3.5, которое скомпилировано с конфигурацией Любой ЦП . Приложение ссылается на файл OCX с помощью сборки взаимодействия.

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

Не удалось получить фабрику класса COM для компонента с CLSID {CCB90182-B81E-11D2-AB74-0040054C3719} из-за следующей ошибки: 80040154

Использование Process Monitor из SysInternals Я мог видеть, что в 32-разрядной ОС система пытается загрузить следующий раздел реестра.

HKCR\Wow6432node\CLSID\{above CLSID}\InprocServer or
HKCR\Wow6432node\CLSID\{above CLSID}\InprocServer32

, которые доступны, и поэтому приложение работает.

В 64-битной версии Windows ищет

HKCR\Wow6432node\CLSID\{above CLSID}\InprocHandler or
HKCR\Wow6432node\CLSID\{above CLSID}\InprocHandler32 

Ни один из них не существует.

Как его можно заставить работать в 64-битной Windows 7?

Ответы [ 2 ]

0 голосов
/ 11 ноября 2014

Иногда могут помочь следующие действия:

создать файлxx.bat с

@echo un-register
regsvr32.exe completePathOfOcxOrDllFile -u
@echo register
regsvr32.exe completePathOfOcxOrDllFile -u
@pause
@exit

И, конечно же, запустить файл bat от имени администратора (щелкнуть правой кнопкой мыши по файлу и запуститькак администратор).

0 голосов
/ 14 июля 2011

Поскольку это InprocServer, он работает в контексте вызывающего процесса. Если вызывающим процессом является AnyCPU, работающий на платформе x64, он может запускать только компоненты x64 COM.

Так что вам нужно либо получить версию компонента x64, либо скомпилировать приложение для платформы x86.

Если этот COM-компонент будет локальным или удаленным сервером, который также будет работать ...

...