1

我无法检索软件的 Installdir。我已经尝试过 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 )
 {
 ...
 }
4

1 回答 1

4

你提到你的机器是 x64,你的应用程序是 32 位的,除非我看错了。鉴于您的环境,我要检查的第一件事是确保密钥存在于 64 位节点中,HKCU\Software\My Company\...而不是 32 位节点HKCU\Software\Wow6432Node\My Company\...中,如果您的密钥存在于 32 位节点中,则需要确保您的应用程序是32 位应用程序,否则,您需要确保您的应用程序是 64 位的,否则您将找不到密钥。

以下代码对我有用,以 64 位运行,并在 Wow6432Node之外找到了密钥。我不明白为什么你不能使用'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 与 x64)问题,则可能是权限问题,请确保您的应用程序运行的上下文可以访问注册表密钥(尝试以管理员甚至系统的身份运行应用程序)

object test = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\VisualStudio\\10.0", "FullScreen", null);
于 2013-05-31T22:31:54.760 回答