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

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

1、通过注册表

csharp 复制代码
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

csharp 复制代码
        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; // 没找到软件
        }

优点全,缺点慢。

相关推荐
sali-tec15 小时前
C# 基于halcon的视觉工作流-章32-线线测量
开发语言·人工智能·算法·计算机视觉·c#
little_xianzhong15 小时前
Java 日期字符串万能解析工具类(支持多种日期格式智能转换)
java·开发语言
Dersun16 小时前
python学习进阶之异常和文件操作(三)
开发语言·python·学习·json
我好喜欢你~16 小时前
C#---Expression(表达式)
开发语言·c#
白菜上路16 小时前
C# Web API Mapster基本使用
前端·c#
LostXerxes16 小时前
封装与属性
c#
LostXerxes16 小时前
C#类与对象
c#
Tiger_shl16 小时前
【.Net技术栈梳理】01-核心框架与运行时(CLR)
开发语言·.net
Tiger_shl16 小时前
【.Net技术栈梳理】02-核心框架与运行时(GC管理)
开发语言·.net
阿里matlab建模师16 小时前
【直流电机鲁棒控制】matlab实现H无穷大控制的直流电机鲁棒控制研究
开发语言·数学建模·matlab·全国大学生数学建模竞赛·美赛·科研项目