我最近搬到了一台装有 VS 2010 的 W7 64 位机器上。
我的项目设置为在 Any CPU
上运行。当我将其更改为针对 x86
时,我注意到我的某些注册表调用不再有效。
我正在尝试像这样读取 ProductID
字段:
RegistryKey windowsNTKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion");
object productID = windowsNTKey.GetValue("ProductId");
productID
在 x86 模式下运行时始终为 null
,在“任何 CPU”下运行时它可以正常工作。这是怎么回事?
最佳答案
一些注册表项被 WOW64 重定向。有关此主题的更多信息,请访问 MSDN http://msdn.microsoft.com/en-us/library/aa384232(v=vs.85).aspx
如果您真的想始终访问 x64 节点 (.Net4):
RegistryKey localMachine = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey windowsNTKey = localMachine.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion");
object productID = windowsNTKey.GetValue("ProductId");
关于C# 读取注册表 : ProductID returns null in x86 targeted app. "Any CPU"工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6304275/