我有一个应用程序(用C#编写),它运行在Windows Server 2008(64位)上 . 在此应用程序中,我必须检查有关IIS的一些注册表项 . 其中我想访问密钥 HKEY_LOCAL_MACHINE\Software\Microsoft\InetStp\Components\WMICompatibility" 以检查是否启用了IIS 6兼容模式 . 为此,我使用 Registry.GetValue 的 Microsoft.Win32 .
由于某些原因,必须使用 x86 编译解决方案 . 结果是,不再可能访问 HKEY_LOCAL_MACHINE\Software\Microsoft\InetStp\Components 但仍然可以从 HKEY_LOCAL_MACHINE\Software\Microsoft\InetStp 读取密钥 . 用“ AnyCPU ”-flag编译它时,注册表访问工作正常 .
那么这种行为的原因是什么?这个问题有解决方案或解决方法吗?
2 回答
Windows x64有一个单独的x86程序节点(不是最明智的想法)
所有注册表项都在 HKEY_LOCAL_MACHINE\Software\WOW6432Node 下
更多关于这个问题:
How to view the system registry by using 64-bit versions of Windows
该程序仍“认为”它正在写入同一条道路 .
我建议你修复你的设置(调度)程序,在正确的位置写下初始设置 .
Edit ,来自MSDN的一些"information":
Registry Keys Affected by WOW64
你对registry redirection犯规了 .
最好的解决方案是打开注册表的64位视图,如下所示:
如果您希望代码在32位和64位计算机上运行,那么您需要在注册表视图之间进行代码切换 .
Note :从32位进程访问64位视图的功能仅添加到.net 4中的.net库中 . 在此之前,您似乎需要使用本机API,例如用P / Invoke .