我无法检索软件的安装目录。我已经尝试过 GetValue 甚至 OpenSubKey 但每次我得到一个 NULL。我正在使用 VS2008、.Net 3.5、64 位机器、32 位进程设置。
private string GetInstallPath()
{
string keyValue = string.Empty;
Object key = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\My Company\\My Tool", "Installdir", null);
...
}
key 返回 NULL,尽管那里有一个有效的字符串。等效代码适用于 VC++。请提供您对问题的见解。对于这个看似简单的任务,我做错了什么?我不能使用“Hive”,因为它是 4.0 标准。代码级帮助而不是链接会很有帮助。
等效于 VC++
HKEY hkey = NULL;
LSTATUS status = RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\My Company\\My Tool\\", 0, KEY_READ, &hkey );
if ( status == ERROR_SUCCESS )
{
DWORD type;
char buff[ 100 ];
DWORD numBytes = sizeof( buff );
if ( RegQueryValueExA( hkey, REGISTRY_ENTRY, NULL, &type, (LPBYTE) buff, &numBytes ) == ERROR_SUCCESS )
{
...
}
最佳答案
你提到你的机器是 x64,你的应用程序是 32 位的,除非我看错了。鉴于您的环境,我要检查的第一件事是确保 key 存在于 64 位节点 HKCU\Software\My Company\...
而不是 32 位节点 HKCU\Software\Wow6432Node\My Company\...
,如果你的 key 存在于32位节点,你需要确保你的应用是32位应用,否则,你需要确保你的应用是 64 位的,否则您将找不到 key 。
以下代码对我有用,以 64 位运行并找到了 Wow6432Node 的 outside 键。我不明白为什么你不能使用“Hive”,它在 3.5 和 4.0 中都有效
RegistryKey regKey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\VisualStudio\\10.0");
if (regKey != null)
{
object val = regKey.GetValue("FullScreen");
}
更新: 以下内容也对我有用,运行.NET 3.5,如果不是平台(x86 vs x64)问题,则可能是权限问题,请确保您的应用程序运行的上下文有权访问注册表项(尝试以管理员或系统身份运行应用程序)
object test = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\VisualStudio\\10.0", "FullScreen", null);
关于c# - 使用 C# 获取注册表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16866698/