64位Windows上的注册表重定向

我正在运行64位Windows,我想使用C#创建注册表项HKCU\Software\Classes\Wow6432Node\CLSID\{myguid}\InprocServer32

我应该告诉它写什么注册表项,以便将它重定向到上面的键? 这也适用于32位Windows。

我正在编译我的应用程序以定位x86。

如果您使用的是.net 4,则应使用RegistryView枚举。 调用OpenBaseKey时传递RegistryView.Registry32 。 使用HKCU\Software\Classes\CLSID{myguid}\InprocServer32作为密钥,让重定向器完成工作。

如果您使用的是旧版本的.net,我恐怕您需要p / invoke本机Win32 API。

如果您恰好是针对x86,那么您不需要做任何事情。 注册表重定向器将做正确的事情并将您的注册表访问重定向到注册表的32位视图。 您只需要从64位进程中采取上述步骤。

64位版本的Windows通过“Windows on Windows”(WoW)子系统模拟32位function。

在注册表的情况下,出于兼容性原因,它们将32位密钥移动到特殊子密钥。 它会自动将32位注册表操作重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node 。 有关注册表重定向器的MSDN主题可以找到更多详细信息。

您可以使用RegistryView上的RegistryView枚举显式打开32位视图,并直接访问HKCU\Software\Classes\CLSID{myguid}\InprocServer32 。 这将自动访问64位系统上的WOW64节点和32位系统上的普通键。

由于您的目标是x86,因此只需使用HKCU\Software\Classes\CLSID\{myguid}\InprocServer32在所有平台上运行。

默认情况下,您的C#应用​​程序使用“Any CPU”编译(这是默认设置 – 这意味着您的程序将在x86计算机上作为x86 exe运行,在x64计算机上运行x64)。 您要做的是将设置更改为Win32。 现在你的程序将始终作为x86 exe运行,因此它将被Windows自动重定向到WOW6432Node。 当您在x64计算机上访问HKCU \ Software \ Classes \ CLSID {myguid} \ InprocServer32时,您将被重定向到所需的密钥。