无法以编程方式读取某些注册表项

问题描述 投票:2回答:3

我有一个小应用程序,它读取注册表项字符串值。它运行良好,但由于某种原因,它在此密钥上失败: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

由于WOW64。此other question专注于细节。
winapi wxwidgets registry
3个回答
2
投票

[我只是看了看我的注册表,在HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProductId或MachineGuid中没有任何密钥,这是在Win7 64位上的


0
投票

我获得了以下代码,可在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;

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.