C# 32应用程序获取64位操作系统注册表

news/2024/11/29 5:34:43/

若C#的程序都是32位的,访问注册表的时候,会访问HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\, 而访问不到HKEY_LOCAL_MACHINE\SOFTWARE
适用版本:.NET 4.0及更高版本

public static Dictionary<string, string> GetInstalledList()
{Dictionary<string, string> softList = new Dictionary<string, string>();try{// search in: CurrentUserRegistryKey localKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);foreach (var item in GetInstallSoftList(localKey, @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")){if (!softList.ContainsKey(item.Key)){softList.Add(item.Key, item.Value);}}localKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32);foreach (var item in GetInstallSoftList(localKey, @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")){if (!softList.ContainsKey(item.Key)){softList.Add(item.Key, item.Value);}}// search in: LocalMachine_32localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);foreach (var item in GetInstallSoftList(localKey, @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")){if (!softList.ContainsKey(item.Key)){softList.Add(item.Key, item.Value);}}localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);foreach (var item in GetInstallSoftList(localKey, @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")){if (!softList.ContainsKey(item.Key)){softList.Add(item.Key, item.Value);}}// search in: LocalMachine_64localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);foreach (var item in GetInstallSoftList(localKey, @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall")){if (!softList.ContainsKey(item.Key)){softList.Add(item.Key, item.Value);}}localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);foreach (var item in GetInstallSoftList(localKey, @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall")){if (!softList.ContainsKey(item.Key)){softList.Add(item.Key, item.Value);}}}catch (Exception ex){logger.Error(ex);}return softList;
}private static Dictionary<string, string> GetInstallSoftList(RegistryKey localKey, string subKey)
{Dictionary<string, string> softList = new Dictionary<string, string>();RegistryKey key = localKey.OpenSubKey(subKey);if (key != null){foreach (String keyName in key.GetSubKeyNames()){RegistryKey subkey = key.OpenSubKey(keyName);string displayName = subkey.GetValue("DisplayName") as string;var version = GetSoftVersion(subkey);if (displayName != null && !softList.ContainsKey(displayName)){softList.Add(displayName, version == null ? "" : version.ToString().Replace(",", ".").Replace(" ", ""));}}}return softList;
}private static string GetSoftVersion(RegistryKey key)
{if (key == null){return null;}var version = key.GetValue("DisplayVersion");if (version != null && !string.IsNullOrEmpty(version.ToString())){return version.ToString();}var majorVersion = key.GetValue("MajorVersion");var minorVersion = key.GetValue("MinorVersion");if (majorVersion != null && minorVersion != null && !string.IsNullOrEmpty(majorVersion.ToString()) && !string.IsNullOrEmpty(minorVersion.ToString())){return majorVersion.ToString() + "." + minorVersion;}majorVersion = key.GetValue("VersionMajor");minorVersion = key.GetValue("VersionMinor");if (majorVersion != null && minorVersion != null && !string.IsNullOrEmpty(majorVersion.ToString()) && !string.IsNullOrEmpty(minorVersion.ToString())){return majorVersion.ToString() + "." + minorVersion;}return null;
}

http://www.ppmy.cn/news/1229378.html

相关文章

大数据-之LibrA数据库系统告警处理(ALM-12057 元数据未配置周期备份到第三方服务器的任务)

告警解释 系统安装完成后会检查元数据是否有周期备份到第三方服务器的任务&#xff0c;然后每1小时会检查一次。如果元数据未配置周期备份到第三方服务器的任务&#xff0c;将发送严重告警。 在用户创建元数据周期备份到第三方服务器的任务后&#xff0c;告警消除。 告警属性…

数据结构【DS】树的性质

度为m的树 m叉树 至少有一个节点的度m 允许所有节点的度都<m 一定是非空树&#xff0c;至少有m1个节点 可以是空树 节点数 总度数 1m叉树&#xff1a; 高度为h的m叉树 节点数最少为&#xff1a;h具有n个结点的m叉树 最大高度&#xff1a;n度为m的树&#xff1a; 具有…

11月24日 AI+软件研发数字峰会(AiDD)即将启航!

▼ 伴随着人工智能&#xff08;AI&#xff0c;特别是大语言模型&#xff09;在众多行业领域的广泛应用及其带来的颠覆性变革&#xff0c;软件的开发模式、方式和实践都可能会发生巨大的变化。为助力更多企业在人工智能的浪潮中乘风破浪&#xff0c;“AI软件研发数字峰会&#x…

根据表名动态获取数据

查询接口 ApiOperation("通用高级搜索")PostMapping("/highSearch")public ResponseResult highSearch(RequestBody HighSearchVO highSearchVO) {return dynamicDataRetrievalService.highSearch(highSearchVO);} Service OverrideTransactionalpublic R…

NVS 错误码对应的原因

参见文档&#xff1a;esp-idf/components/nvs_flash/include/nvs.h #define ESP_ERR_NVS_BASE 0x1100 /*!< Starting number of error codes */ #define ESP_ERR_NVS_NOT_INITIALIZED (ESP_ERR_NVS_BASE 0x01) /*!< T…

Linux常见命令手册

目录 文件命令 文件和目录命令 文件的权限命令 文件搜索命令 进程命令 查看进程命令 关闭进程命令 用户和群组命令 网络命令 firewall-cmd 网络应用命令 高级网络命令 网络测试命令 网络安全命令 网络配置命令 软件管理命令 系统信息命令 vi编辑器 关机命令…

使用centos搭建内网的yum源

1.安装httpd服务 2.启动服务&#xff0c;设置开机自启 #启动服务 systemctl start httpd # 设置开机自动启动 systemctl enable httpd systemctl status httpd3.新建一个目录&#xff0c;将rpm文件放到该目录下 4.将/etc/httpd/conf/httpd.conf文件中的DocumentRoot "…

香港公司如何开户 香港公司开户流程 香港公司开户注意事项

香港公司成为越来越多企业的优选注册地&#xff0c;由于其更加开 放的经济政策和国际化的金融市场&#xff0c;吸引了大量的投资者。然而&#xff0c;对于众多企业来说&#xff0c;香港公司的开户过程可能会有一些复杂和繁琐的环节。 香港公司开户流程 开立香港公司账户通常需…