我有一个小应用程序,它读取注册表项字符串值。它运行良好,但由于某种原因,它在此密钥上失败:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId
尽管使用HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
]的其他值
在“ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography \ MachineGuid'上也失败”
我以管理员身份运行,这是一个因素吗?我正在运行W7 64bit,另一台W7计算机和Vista计算机都可以正常工作。我唯一的猜测是某些许可问题,或与我运行64位有关。
更新:
这似乎与运行Windows 64位和\Software\Wow6432Node\
的系统有关。我不知道那是什么。我同时拥有\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\
和\Software\Microsoft\Windows NT\CurrentVersion\
,但只有后者包含ProductId值...由于某些原因,当我询问Windows显然在Wow6432Node中查找键时]我们正在使用wxWidgets,但如果需要的话,可能会直接使用一些win32代码...我们的应用程序是32位应用程序,但目标PC可能正在运行32或64位版本的Windows。我有一个小应用程序,它读取注册表项字符串值。它工作正常,但由于某种原因在此密钥上失败:尽管...
<<< [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProductId
[我只是看了看我的注册表,在HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProductId或MachineGuid中没有任何密钥,这是在Win7 64位上的
我获得了以下代码,可在32位XP盒和64位Win 7盒上工作。我认为这应该涵盖大多数基础。
// start out trying to read machine guid on 32 bit machine
object value = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography", @"MachineGuid", (object) "defaultValue");
if (value != null && value.ToString() != "defaultValue")
{
return value.ToString();
}
// read machine guid on 64 bit machine
RegistryKey regKeyBase = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey regKey = regKeyBase.OpenSubKey(@"SOFTWARE\Microsoft\Cryptography", RegistryKeyPermissionCheck.ReadSubTree);
value = regKey.GetValue("MachineGuid", (object) "defaultValue");
regKeyBase.Close();
regKey.Close();
if (value != null && value.ToString() != "defaultValue")
{
return value.ToString();
}
return string.Empty;