64位Windows上的注册表重定向

时间:2011-11-21 17:27:54

标签: c# registry 32bit-64bit

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

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

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

4 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:2)

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

对于注册表,出于兼容性原因,它们将32位密钥移动到特殊子项。它会自动将32位注册表操作重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node。有关Registry Redirector

的MSDN主题,可以找到更多详细信息

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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