如果标题不是那么准确,请原谅我。
当我在做与 COM 服务器和注册表重定向相关的事情时遇到了一些问题,我不太确定我的理解是否正确。希望任何人都可以分享一些关于它的信息。提前致谢。
基本上,在任何人都可以使用它的服务之前,一个 COM 服务器已经在注册表中注册了。在 64 位 Windows 操作系统上,注册表中可能有 2 个可能的视图,一个是默认视图,另一个是 WOW64 视图。例如,第一个注册表项是:COMPUTER\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID{GUID}\LocalServer32,另一个是:COMPUTER\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID{GUID}\LocalServer32。并且取决于默认情况下可以读取任何一个的进程位数(64位与32位),我们也可以使用KEY_WOW64_64KEY或KEY_WOW64_32KEY(如:http: //msdn.microsoft.com/en-us/library/windows/ desktop/aa384129(v=vs.85).aspx ) 以访问其他替代注册表项。
我需要的是,我想通过读取注册表项来获取 LocalServer32 可执行文件,这可以工作。问题是,对于我读回的可执行文件路径,我是否需要根据我从哪个视图获取值来进行文件路径转换(以获得正确的值)?例如,如果文件路径是从 COMPUTER\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID{GUID}\LocalServer32 获取的,文件路径是:C:\Windows\System32\abc.exe,是否需要翻译路径到:C:\Windows\SysWow64\abc.exe?还是我需要将 C:\Program Files\abc.exe 翻译成 C:\Program Files(x86).exe?
另一个问题是,如果对于 COM 的某些注册表项,在两个视图中设置的值不同(例如,一个具有 C:\Program Files\abc.exe,另一个具有 C:\Program Files(x86) \abc.exe),那么当COM服务器启动时,svchost.exe怎么知道启动哪个,C:\Program Files\abc.exe还是C:\Program Files(x86)\abc.exe?有谁知道 svchost.exe 确定这一点的逻辑?如果存在则使用第一个,否则使用第二个?
非常感谢。