Elm*_*mex 7 .net c# iis registry
我有一个应用程序(用C#编写),它运行在Windows Server 2008(64位)上.在此应用程序中,我必须检查有关IIS的一些注册表项.其中我想访问密钥HKEY_LOCAL_MACHINE\Software\Microsoft\InetStp\Components\WMICompatibility" 以检查是否启用了IIS 6兼容模式.为此,我使用了Microsoft.Win32的Registry.GetValue.
由于某些原因,必须使用x86编译解决方案.结果是,不再可以访问HKEY_LOCAL_MACHINE\Software\Microsoft\InetStp\Components,但仍可以从HKEY_LOCAL_MACHINE\Software\Microsoft\InetStp读取密钥.使用" AnyCPU "-flag 编译时,注册表访问工作正常.
那么这种行为的原因是什么?这个问题有解决方案或解决方法吗?
Dav*_*nan 12
您正在违反注册表重定向.
最好的解决方案是打开注册表的64位视图,如下所示:
using Microsoft.Win32;
...
RegistryKey registryKey =
RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).
OpenSubKey(@"Software\Microsoft\InetStp\Components");
object value = registryKey.GetValue(@"WMICompatibility");
Run Code Online (Sandbox Code Playgroud)
如果您希望代码在32位和64位计算机上运行,那么您需要在注册表视图之间进行代码切换.
注意:从32位进程访问64位视图的功能仅添加到.net 4中的.net库中.在此之前,您似乎需要使用本机API,例如使用P/Invoke.
| 归档时间: |
|
| 查看次数: |
3466 次 |
| 最近记录: |