收集电脑上安装的软件列表
2018-06-18 04:26:20来源:未知 阅读 ()
公司的IT工程师某一天找我聊天,说有没有一个程序能够统计电脑上安装的软件,公司采用的是域控,然后把这个软件放在域控的组策略里面,设置一番,只要登录域控的时候自动运行一遍,然后把采集的信息写入共享目录,这样就不用一台一台的统计了。
当时一想就直接用C#写了一个控制台程序。代码如下:
static void Main(string[] args) { string path = @"\\192.168.10.251\\hard_info\\"; StringBuilder proinfo = new StringBuilder(); string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey)) { foreach (string skName in rk.GetSubKeyNames()) { using (RegistryKey sk = rk.OpenSubKey(skName)) { try { var displayName = sk.GetValue("DisplayName"); if (displayName != null) { proinfo.AppendLine(displayName.ToString()); } } catch { } } } } File.WriteAllText(path + Dns.GetHostName() + ".txt", proinfo.ToString()); Environment.Exit(0); }
运行以后,是能统计出来,但是少了很多软件,只有一部分,网上查询一番,发现要区分64位操作系统和32位系统,还要区分是LocalMachine还是CurrentUser
针对x86系统
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
针对x64系统
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
根据以上,改进以后代码如下:
static void Main(string[] args) { string path = @"\\192.168.10.251\\hard_info\\"; StringBuilder proinfo = new StringBuilder(); proinfo = ShowAllSoftwaresName(); File.WriteAllText(path + Dns.GetHostName() + ".txt", proinfo.ToString()); Environment.Exit(0); } public static StringBuilder DisplayInstalledApps(RegistryKey key) { StringBuilder result = new StringBuilder(); string displayName; if (key != null) { foreach (String keyName in key.GetSubKeyNames()) { RegistryKey subkey = key.OpenSubKey(keyName); displayName = subkey.GetValue("DisplayName") as string; if (!string.IsNullOrEmpty(displayName)) { result.AppendLine(displayName); } } } return result; } public static StringBuilder ShowAllSoftwaresName() { StringBuilder proinfo = new StringBuilder(); RegistryKey key; // search in: CurrentUser key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"); proinfo.Append(DisplayInstalledApps(key)); // search in: LocalMachine_32 key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"); proinfo.Append(DisplayInstalledApps(key)); // search in: CurrentUser_64 key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"); proinfo.Append(DisplayInstalledApps(key)); // search in: LocalMachine_64 key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"); proinfo.Append(DisplayInstalledApps(key)); return proinfo; }
运行以后,全部采集了电脑安装的软件。
发给IT工程师后,反馈:有部分电脑运行不了。。。xp系统不支持。。。系统默认没安装framework
最后和IT工程师商议后,可以使用VBS,以前也写过VBS,网上找找资料就写了一个,完美解决了。
附件为vbs脚本:vbs获取软件列表.zip
参考资料:
VBScript:检查目标计算机软件列表
PowerShell快速高效地获取安装的软件列表
Uninstall Registry Key
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:ajax基础一
- 3-JVM垃圾回收算法和垃圾收集器 2020-05-12
- java面经收集 2020-05-12
- git和tortoiseGit安装的那些事儿 2020-05-05
- 堆内存常见的分配策略、 经典的垃圾收集器、CMS与G1收集器及 2020-04-28
- 7种jvm垃圾收集器,java实现核心,这个有点意思 2020-04-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash