c# - 使用 C# 获取注册表值

标签 c# .net registry

我无法检索软件的安装目录。我已经尝试过 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/

相关文章:

c# - 如何对泛型约束类使用方法隐藏(新)

c# - 如何在 XML C# 中获取根级节点

c# - 令人厌恶的 Hack(基类上使用反射的工厂方法)

c# - 我什么时候应该在 .NET 应用程序中实现全局化和本地化?

visual-studio-2012 - Visual Studio 2012 HelpViewer 2.0 仍然损坏 : location specified installing content invalid

c# - 如果我不知道它的类型,如何从远程机器获取注册表值? (C#)

c# - 如何将 PNG 作为字节 [] 提供给 HtmlImageLoadEventArgs 回调?

c# - T4 模板 typeOf(List<>) 导致错误但在 C# 类中有效

c# - 将函数作为参数传递并设置默认参数

python - 使用 Python winreg 更改注册表项未生效,但不会抛出错误