我有一个使用 Any CPU 的配置编译的.NET 3.5应用程序。该应用程序引用带有互操作程序集的OCX文件。
当应用程序安装在Windows 7 32位上时,一切正常。当在Windows 7 64位上安装相同的应用程序时,我们收到错误:
检索具有CLSID {CCB90182-B81E-11D2-AB74-0040054C3719}的组件的COM类工厂因以下错误而失败: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上运行?
答案 0 :(得分:0)
因为它是一个InprocServer,它在调用进程上下文中运行。如果调用进程是在x64平台上运行的AnyCPU,则它只能运行x64 COM组件。
因此,您需要获取x64版本的组件或编译x86平台的应用程序。
如果这个COM组件是本地或远程服务器也可以工作......
答案 1 :(得分:0)
有时可以帮助下一步行动:
使用
创建filexx.bat@echo un-register
regsvr32.exe completePathOfOcxOrDllFile -u
@echo register
regsvr32.exe completePathOfOcxOrDllFile -u
@pause
@exit
当然,以管理员身份运行bat文件(右键单击文件,然后单击以管理员身份运行)。