在C#中如何获取系统中所安装的所有软件信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C#中如何获取系统中所安装的所有软件信息相关的知识,希望对你有一定的参考价值。

在C#中如何获取系统中所安装的所有软件信息,还有如何打开系统中某个程序

在编写我们自己的脚本之前,我们需要对WMI的体系结构有个基本的了解。如图一:(1.gif)
在WMI 体系结构中我们最需要关心的就是WMI提供程序,WMI提供程序在WMI和托管资源之间扮演着中间方的角色。提供程序代表使用者应用程序和脚本从WMI托管资源请求信息,并发送指令到WMI托管资源。下面是我们利用WMI编程经常要用到的WMI内置提供程序清单,以供编程参考。
1.Active Directory提供程序
链接库文件:dsprov.dll
命名空间:root\\directory\\ldap
作用:将Active Directory 对象映射到 WMI。

2.事件日志提供程序
链接库文件:ntevt.dll
命名空间:root\\cimv2
作用:管理 Windows 事件日志,例如,读取、备份、清除、复制、删除、监视、重命名、压缩、解压缩和更改事件日志设置。

3.注册表提供程序
链接库文件:stdprov.dll
命名空间:root\\default
作用:读取、写入、枚举、监视、创建、删除注册表项和值。

4.Win32 提供程序
链接库文件:cimwin32.dll
命名空间:root\\cimv2
作用:提供关于计算机、磁盘、外围设备、文件、文件夹、文件系统、网络组件、操作系统、打印机、进程、安全性、服务、共享、SAM 用户及组,以及更多资源的信息。

5.Windows 安装程序提供程序
链接库文件:msiprov.dll
命名空间:root\\cimv2
作用:提供对已安装软件信息的访问。

从上面可以看出在WMI中类(即内置提供程序)被分组到命名空间中,命名空间可以看成是一个组。比如,命名空间 root\\cimv2 包括大部分表示通常与计算机和操作系统相关联的资源的类。在使用类的时候要说明类所在的命名空间。类由属性和方法构成。这是可视化编程中的两个重要的概念。属性描述的是对象的状态,方法是对象可以执行的操作。
参考技术A 呵呵~碰巧看到。

先说第二个问题:如何打开系统中某个程序
使用System.Diagnostics 命名空间中的Process类,示例代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;

namespace ConsoleApplication6

class Program

static void Main(string[] args)

Process process = new Process();//新建一个Process对象
process.StartInfo.FileName = "winmine.exe";//指定此Process对象的文件是Winmine.exe,也就是“扫雷”程序
process.Start();//启动扫雷
process.WaitForExit();//等待扫雷退出后结束此程序




第一个问题相对难一点,可以使用WMI来完成。
有关WMI的具体信息,网上有很多介绍的帖子,我就不多费话了,主要是说个实现过程,仍然是一个Console程序:
using System;
using System.Collections.Generic;
using System.Text;
using System.Management;

namespace ConsoleApplication6

class Program

static void Main(string[] args)

ManagementScope scope = new ManagementScope(new ManagementPath("root\\CIMV2"));

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Product");
searcher.Scope = scope;
searcher.Options = new EnumerationOptions(null, TimeSpan.MaxValue, 1, true, false, true, true, false, true, true);
ManagementObjectCollection collection = searcher.Get();

foreach (ManagementObject nextObject in collection)

Console.WriteLine(nextObject.GetPropertyValue("Caption"));


Console.ReadKey(true);




这种方法只能看到MSI安装程序(微软制造)按装的程序,使用API的方式相当繁琐,如果您确实需要,可以联系我。

有关具体的信息,您可以参考MSDN或者联系我。

所有代码均在WinXPsp2+Dot Net Framework 2.0 下调试通过。

谢谢。

电脑管家(像qq,360管家)是怎么获取到系统中安装的软件列表和补丁列表(漏洞,已安装,未安装)用C#如何实现

如题,求高手解答...分数已经给到最多了,我希望多点人气,少点打酱油和路过.
之前用WMI和扫描注册表两种方式来获取这些信息.后来发现获取到的软件信息和补丁信息都不准确!扫描注册表会把补丁和软件信息一起取到,但是里面的软件信息条数要比系统自带的"程序和功能"里的软件条数要多,补丁的信息就更乱了!用WMI读取到的软件信息不全,因为只能读取到msi安装的软件.而读取出的补丁信息也不全...

参考技术A 你好
一般是通过注册表,获取到注册表最新版本信息,再反馈给前台页面,升级后再修改注册表信息版本,这样就提示对应的信息提示了,感谢你的支持
参考技术B 你好:
电脑管家是读取注册表得到的。

建议使用最新7.6版本腾讯电脑管家,“管理+杀毒”二合一,权威认证,杀毒实力跻身全球第一阵营,无需另外安装杀毒软件;
可关注 http://bbs.guanjia.qq.com/forum.php?mod=viewthread&;tid=154761
参考技术C 获取系统已安装软件的列表:注册表("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall")键值而获取
希望能帮到你
参考技术D 你去黑客网站论坛去问一下哈,那里面高手如云,我只是建议,没啥意思。 第5个回答  2011-11-24 我依稀记得,金山卫士出了一部分源码的。你找找看。

以上是关于在C#中如何获取系统中所安装的所有软件信息的主要内容,如果未能解决你的问题,请参考以下文章

C# 如何获取contextMenuStrip弹出菜单中所单击子菜单中的所有父文本。

c#如何获取其他应用程序的启动参数

如何查看Ubuntu安装包信息

利用C#访问注册表获取软件的安装路径

C# 问题:如何将在 DataGridView 中所做的更改保存回使用的 DataTable?

c#如何获取其他应用程序的启动参数