Windows 7 64 位 OCX 加载问题

发布于 2024-11-19 21:07:52 字数 867 浏览 3 评论 0 原文

我有一个 .NET 3.5 应用程序,它是使用任何 CPU 的配置进行编译的。应用程序正在使用互操作程序集引用 OCX 文件。

当应用程序安装在 Windows 7 32 位上时,一切正常。当相同的应用程序安装在 Windows 7 64 位上时,我们会收到错误:

由于以下错误,检索 CLSID 为 {CCB90182-B81E-11D2-AB74-0040054C3719} 的组件的 COM 类工厂失败:80040154

使用 进程监视器 href="http://en.wikipedia.org/wiki/Winternals" rel="nofollow">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 

它们都不存在。

如何使其在 Windows 7 64 位上运行?

I have a .NET 3.5 application that is compiled with a configuration with Any CPU. The application is referencing an OCX file with an interop assembly.

When the application is installed on a Windows 7 32-bit everything works fine. When the same appplication is installed on a Windows 7 64-bit, we get an error:

Retrieving the COM class factory for component with CLSID {CCB90182-B81E-11D2-AB74-0040054C3719} failed due to the following error: 80040154

Using Process Monitor from SysInternals I could see that on the 32-bit OS the system is trying to load the following registry key.

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

which are available and that's why the application works.

On the 64-bit version Windows is looking for

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

None of them exist.

How can it be made to work on Windows 7 64-bit?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怪我入戏太深 2024-11-26 21:07:52

由于它是一个 InprocServer,因此它在调用进程上下文中运行。如果调用进程是在 x64 平台上运行的 AnyCPU,则它只能运行 x64 COM 组件。

因此,您要么需要获取 x64 版本的组件,要么为 x86 平台编译应用程序。

如果这个 COM 组件是本地或远程服务器也可以工作......

Since it's an InprocServer it runs in calling process context. If the calling process is AnyCPU running on x64 platform it can run only x64 COM components.

So you either need to get x64 version of component or compile your application for x86 platform.

If this COM component would be an Local or Remote server that would work as well...

帅的被狗咬 2024-11-26 21:07:52

有时可以帮助接下来的操作:

创建一个文件xx.bat

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

,当然,以管理员身份运行bat文件(右键单击文件并单击以管理员身份运行)。

Sometimes can help the next actions:

create an filexx.bat with

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

And, of course, run the bat file as admin (right click file and click in run as admin).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文