Geo*_*ge2 41 com registry 64-bit x86 clsid
我听说在Windows x64架构上,为了支持运行x86和x64应用程序,有两个独立/不同的Windows注册表集 - 一个用于x86应用程序访问,另一个用于x64应用程序访问?例如,如果COM在x86注册表集中注册CLSID,那么x64应用程序永远无法通过CLSID访问COM组件,因为x86/x64具有不同的注册表集?
所以,我的问题是我对上述样本的理解是否正确?我还想获得更多文档来学习这个主题,关于x64架构上的两个不同的注册表集.(我做了一些搜索,但没有找到任何有价值的信息.)
17 *_* 26 57
我不久前遇到了这个问题.简短的回答是,如果您在64位计算机上运行32位应用程序,那么它的注册表项位于Wow6432Node下.
例如,假设您有一个应用程序将其注册表信息存储在:
HKEY_LOCAL_MACHINE\SOFTWARE\CompanyX
Run Code Online (Sandbox Code Playgroud)
如果将应用程序编译为64位二进制文件并在64位计算机上运行,则注册表项位于上面的位置.但是,如果您将应用程序编译为32位二进制文件并在64位计算机上运行,那么您的注册表信息现在位于此处:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\CompanyX
Run Code Online (Sandbox Code Playgroud)
这意味着如果您在同一台计算机上同时运行32位和64位版本的应用程序,那么它们将分别查看一组不同的注册表项.
你的理解是正确的.不需要x64应用程序来访问x86 CLSID,因为它无论如何都不会加载这些组件,反之亦然.
如果要创建供x86和x64使用的组件,则需要创建一对为x86构建的dll,另一个为x64,并在注册表的相应部分中注册.System32文件夹中的regsrv32.exe将反常注册x64组件,SysWOW64文件夹中的regsrv32.exe将注册x86组件.
或者为任何CPU架构使用的任何CPU构建.NET程序集.