首页 > 解决方案 > 搜索注册表时读取错误的注册表项 C#

问题描述

我正在尝试在注册表 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources 中读取此节点上的值

我正在尝试使用以下代码执行此操作:

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources", false);
string[] dsnNames = key.GetValueNames();

但是,当我运行此代码时,它不会从我硬编码的节点中读取,而是从 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBC.INI\ODBC 数据源中读取。这些是 32 位系统 DSN 的唯一 btw。

这真让我抓狂。我的机器是 Windows 10 Pro build 18363.1198 64 位。.Net 框架是 4.5.2。

为什么我的代码没有从正确的注册表树节点读取?

标签: c#

解决方案


正确的注册表树节点。

WOW6432NodeSOFTWARE适用于 64 位平台上的 32 位应用程序

当 32 位应用程序查询HKEY_LOCAL_MACHINE\SOFTWARE\<company>\<product>子键下的值时,应用程序从子键中读取HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\<company>\<product>

如果您将应用程序构建为 64 位,它将根据需要使用“原始”64 位注册表树。

如果您不想这样做,那么您已经获得了正确的密钥。


推荐阅读