64位Windows上的注册表重定向



我正在运行64位Windows,我想使用c#创建注册表项HKCUSoftwareClassesWow6432NodeCLSID{myguid}InprocServer32

我应该告诉它写什么注册表项,这样它就会被重定向到上面的键?这在32位Windows上也应该可以工作。

我正在编译我的应用程序的目标x86

如果您正在使用。net 4,您应该使用RegistryView枚举。呼叫OpenBaseKey时通过RegistryView.Registry32。使用HKCUSoftwareClassesCLSID{myguid}InprocServer32作为您的密钥,并让重定向器完成工作。

如果你使用的是旧版本的。net,那么恐怕你需要调用本地的Win32 API。

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

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

在注册表的情况下,出于兼容性原因,它们将32位键移到一个特殊的子键。它会自动将32位注册表操作重定向到HKEY_LOCAL_MACHINESOFTWAREWow6432Node。有关注册表重定向的更多详细信息可在MSDN主题中找到。

可以在RegistryKey.OpenBaseKey上使用RegistryView enum显式打开32位视图,直接访问HKCUSoftwareClassesCLSID{myguid}InprocServer32。这将自动访问64位系统上的WOW64节点和32位系统上的正常密钥。

由于您的目标是x86,因此只需使用HKCUSoftwareClassesCLSID{myguid}InprocServer32就可以在所有平台上工作。

默认情况下,您的c#应用程序是使用"Any CPU"编译的(这是默认设置——这意味着您的程序将在x86机器上作为x86 exe运行,而在x64机器上作为x64运行)。您要做的是将设置更改为Win32。现在您的程序将始终作为x86 exe运行,因此它将由windows自动重定向到WOW6432Node。当您在x64机器上访问HKCUSoftwareClassesCLSID{myguid}InprocServer32时,您将被重定向到所需的密钥。

最新更新