C#程序开发,检测当前电脑已经安装的软件目录

ops/2024/11/14 8:10:17/

在Windows中使用C#做软件开发,有时候需要获取当前系统中已安装软件及其版本号,接下来就简单介绍一下,如何通过C#获取来实现。

1、通过注册表

public List<PcSoftinfo> GetAllInstalledSoftware(string name)
{var keys = new RegistryKey[]{Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Installer\Products"),Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Installer\Products"),Registry.ClassesRoot.OpenSubKey(@"Installer\Products"),Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"),Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"),Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"),Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall")};var softs = new List<PcSoftinfo>();foreach (var k in keys){if (k == null)continue;foreach (var keyName in k.GetSubKeyNames()){RegistryKey subkey = k.OpenSubKey(keyName);var displayName = subkey.GetValue("DisplayName") as string;//var productName = subkey.GetValue("ProductName") as string;不同注册表名称不一样。if (!string.IsNullOrEmpty(displayName)){int systemComponent = (int)subkey.GetValue("SystemComponent", 0);if (systemComponent == 1){//系统应用排除//continue;}var displayVersion = subkey.GetValue("DisplayVersion") as string;if (!string.IsNullOrEmpty(displayVersion)){softs.Add(new PcSoftinfo() { Name = displayName, Ver = displayVersion });}}}}return softs;
}

优点快,缺点不完全,有些软件读不到。

2、通过Win32_Product

        public List<PcSoftinfo> IsSoftwareInstalled(string softwareName){// 创建WMI查询,检查Win32_Product类中的安装信息//string query = "SELECT Name, Version FROM Win32_Product WHERE Vendor ='厂家名称'";string query = "SELECT Name, Version FROM Win32_Product";ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);var softs = new List<PcSoftinfo>();foreach (ManagementObject obj in searcher.Get()){// 如果找到匹配的软件string NAME = obj["Name"].ToString();string version = obj["Version"]?.ToString();softs.Add(new PcSoftinfo() { Name = NAME, Ver = version });}return softs; // 没找到软件}

优点全,缺点慢。


http://www.ppmy.cn/ops/133123.html

相关文章

ETLCloud支持的数据处理类型包括哪些?

随着企业不断壮大&#xff0c;信息孤岛的问题变得日益突出&#xff0c;信息集成因此成为企业发展的关键因素。在数据分析过程中&#xff0c;数据集成是必不可少的一环。ETLCloud是一款强大的数据集成和管理平台&#xff0c;专注于数据的提取、转换和加载&#xff08;ETL&#x…

YoloV10改进策略:上采样改进|CARAFE,轻量级上采样|即插即用|附改进方法+代码

论文介绍 CARAFE模块概述&#xff1a;本文介绍了一种名为CARAFE&#xff08;Content-Aware ReAssembly of FEatures&#xff09;的模块&#xff0c;它是一种用于特征上采样的新方法。应用场景&#xff1a;CARAFE模块旨在改进图像处理和计算机视觉任务中的上采样过程&#xff0…

Nginx、Gateway的区别

Nginx 和 Gateway 都是用于处理网络流量的软件&#xff0c;但它们在设计、用途和功能上有所不同。以下是 Nginx 和 Gateway&#xff08;通常指的是 API Gateway&#xff09;之间的一些主要区别&#xff1a; 用途和目的&#xff1a; Nginx&#xff1a;最初设计为一个高性能的 HT…

线性代数中的核心数学知识

线性代数是数学的一个分支&#xff0c;主要处理线性关系问题&#xff0c;在机器学习中扮演着至关重要的角色。以下是线性代数中的核心数学知识归纳&#xff1a; 一、行列式 行列式是线性代数中一个基础且重要的概念&#xff0c;它不仅用于计算矩阵的逆、解线性方程组&#xff…

【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】

在 Kubernetes 中&#xff0c;NodePort 类型的 Service 允许用户通过每个节点的 IP 地址和指定的端口访问应用程序。如果 NodePort 类型的 Service 无法通过节点的 IP 地址和指定端口进行访问&#xff0c;可能会导致用户无法访问应用。本文将详细分析该问题的常见原因及其解决方…

spring组件介绍

1. Spring Core&#xff08;Spring核心&#xff09;&#xff1a; • BeanFactory&#xff1a;Spring IoC容器的基础接口&#xff0c;提供了配置框架和基本的功能&#xff0c;用于管理任何类型的对象。 • ApplicationContext&#xff1a;BeanFactory的子接口&#xff0c;提供了…

uni-app选项卡制作 ⑥

文章目录 十、选项卡制作一 、组件创建二、scroll-view 组件使用三、点击设置按钮跳转到标签设置界面四、数据获取 十、选项卡制作 1.遇到错误&#xff1a; 2.解决问题&#xff1a; 3.this 指向问题 // 指向&#xff1a; get_label_list uniCloud.callFunction({name: "g…

SpringCloud框架学习(第二部分:Consul、LoadBalancer和openFeign)

目录 六、Consul服务注册和发现 1.基本介绍 2.下载运行 3.服务注册与发现 &#xff08;1&#xff09;支付服务provider8001注册进consul &#xff08;2&#xff09;修改订单服务cloud-consumer-order80 4.CAP &#xff08;1&#xff09;CAP理论 &#xff08;2&#x…