在审计项目时,我遇到了有关软件和许可证的不同问题。我的项目在带有Perl的Linux上运行,我通过SNMP和WMI成功地重试了远程机器软件。最大的问题是这两个协议会返回截然不同的结果。例如,一个人可能找到一个程序而另一个可能找不到,反之亦然。
我知道SNMP会检索具有相关卸载密钥的软件(如果我错了,请更正我):
HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \卸载
但是Win32_Product呢?这就是文档中所说的:
Win32_Product WMI类表示安装的产品 通过Windows Installer。产品通常与一个产品相关 安装包。
这是什么意思?最后但并非最不重要的是,有没有办法改进安装软件的检索方式?我的意思是,如果我从控制面板看我已安装的软件并使用SNMP和WMI对抗结果,那么就会有很多奇怪的事情。
编辑:只是一个快速更新,我在.NET C#中开发了一些我安装在许多计算机上的程序。太糟糕了,WMI和SNMP都找不到它们。我用通常的Visual Studio生成的设置安装了这些程序。任何提示?
答案 0 :(得分:3)
人们基本上使用WMI来查询各种系统参数。 WMI公开了许多可以利用的接口。它主要用于VBScript,但也可以使用C ++ / COM或C#与它进行交互。 This Wikipedia article可以为您提供有关WMI的详细说明,然后您可以了解Win32_Product类的功能。 This is another great article和开始使用WMI的人必须阅读。
还要经历这些文章:
这些文章将帮助您更好地理解WMI概念。
就Windows安装程序而言:
Windows安装程序基于服务器 - 客户端体系结构。 Windows Installer实际上是Windows服务。 Windows安装程序支持的各种功能使其成为应用程序生命周期管理的最标准方法。使用.msi扩展名的基本MSI(没有基本的东西)包用于打包和分发应用程序。
Basic MSI包基本上是一个DATABASE。应用程序二进制文件和其他东西可以打包为CAB文件并包含在MSI包中,也可以存在于其外部。
这称为TRANSACTIONAL安装方法。 Application Packaging开发人员只需填写数据库中的各个表,Windows Installer引擎就可以处理其他所有事务。这听起来似乎很容易,但非常困难,需要很多知识。
当应用程序安装在任何系统上时,Windows Installer会写入正确管理系统上安装的所有资源所需的所有注册表项。由于应用程序的生命周期由Windows Installer管理,因此可以轻松支持:
1)修复
2)恢复力
完成所有这些后,您可能会更好地了解您案件中涉及的所有各方。然后你会有更清楚的问题(或者可能没有!),我们可以更好地帮助你(或者你根本不需要它!)。