C# 使用C获取注册表值#
我无法检索软件的Installdir。我尝试过GetValue甚至OpenSubKey,但每次都得到一个空值。我使用的是VS2008、.NET3.5、64位机器、32位进程设置C# 使用C获取注册表值#,c#,.net,registry,C#,.net,Registry,我无法检索软件的Installdir。我尝试过GetValue甚至OpenSubKey,但每次都得到一个空值。我使用的是VS2008、.NET3.5、64位机器、32位进程设置 private string GetInstallPath() { string keyValue = string.Empty; Object key = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\My Company\\My Tool", "I
private string GetInstallPath()
{
string keyValue = string.Empty;
Object key = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\My Company\\My Tool", "Installdir", null);
...
}
键返回NULL,但其中存在有效字符串。等效代码在VC++中工作。请提供您对该问题的见解。对于这项看似简单的任务,我做错了什么?我不能使用“蜂巢”,因为它是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位的,除非我读错了。考虑到您的环境,我首先要检查的是确保密钥存在于64位节点中,
HKCU\Software\My Company\…
,而不是32位节点中,HKCU\Software\Wow6432Node\My Company\…
,如果您的密钥存在于32位节点中,则需要确保您的应用程序是32位应用程序,否则,你需要确保你的应用程序是64位的,否则你找不到密钥
以下代码适用于我,以64位运行,并在WOW6432节点的外部找到了键。我不明白为什么您不能使用“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)问题,那么可能是权限问题,请确保应用程序运行的上下文可以访问注册表项(尝试以管理员甚至系统身份运行应用程序)
你提到你的机器是x64,你的应用程序是32位的,除非我读错了。考虑到您的环境,我首先要检查的是确保密钥存在于64位节点中,
HKCU\Software\My Company\…
,而不是32位节点中,HKCU\Software\Wow6432Node\My Company\…
,如果您的密钥存在于32位节点中,则需要确保您的应用程序是32位应用程序,否则,你需要确保你的应用程序是64位的,否则你找不到密钥
以下代码适用于我,以64位运行,并在WOW6432节点的外部找到了键。我不明白为什么您不能使用“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)问题,那么可能是权限问题,请确保应用程序运行的上下文可以访问注册表项(尝试以管理员甚至系统身份运行应用程序)
添加了与VC++等效的edit。@santra_a我发布了一个正在工作的c#,它实际上将遍历并找到一个定义,然后将修改卸载字符串以修复应用程序。我相信这就是你想要的吗?添加了VC++等价物作为“编辑”。@santra_a我发布了一个正在工作的c#,它实际上会经过并找到一个定义,然后会修改卸载字符串以修复应用程序。我相信这就是你要找的,对吗?你要我检查的第一件事是错误点。我必须在“任何CPU”的平台目标中将代码显式设置为“x86”。这是因为我试图获取信息的应用程序是32位的,因此在Wow6432中。@santra_很高兴听到这个问题得到解决,是的,
AnyCPU
将在64位系统上以64位运行,在x86系统上以32位运行,除非初始条目程序集另有说明:)您希望我检查的第一件事是错误点。我必须在“任何CPU”的平台目标中将代码显式设置为“x86”。这是因为我试图获取信息的应用程序是32位的,因此在Wow6432中。@santra_很高兴听到这个问题得到解决,是的,AnyCPU
将在64位系统上以64位运行,在x86系统上以32位运行,除非初始入口程序集另有说明:)