Perl Win32_产品是如何工作的?

Perl Win32_产品是如何工作的?,perl,wmi,snmp,auditing,Perl,Wmi,Snmp,Auditing,在一个审计项目中,我遇到了关于软件和许可证的不同问题。我的项目使用Perl在Linux上运行,我通过SNMP和WMI成功地重试了远程计算机软件。最大的问题是这两个协议返回的结果完全不同。例如,一个可能找到一个程序,另一个可能找不到,反之亦然 我知道SNMP检索具有相关卸载密钥的软件(如果我错了,请更正我): HKEY\U本地\U计算机\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 但是呢?这就是文档所说的: Win32_Product W

在一个审计项目中,我遇到了关于软件和许可证的不同问题。我的项目使用Perl在Linux上运行,我通过SNMP和WMI成功地重试了远程计算机软件。最大的问题是这两个协议返回的结果完全不同。例如,一个可能找到一个程序,另一个可能找不到,反之亦然

我知道SNMP检索具有相关卸载密钥的软件(如果我错了,请更正我):

HKEY\U本地\U计算机\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

但是呢?这就是文档所说的:

Win32_Product WMI类表示已安装的产品 由Windows Installer提供。一种产品通常与一种产品相关 安装包

这是什么意思?最后但并非最不重要的一点是,有没有办法改进如何检索已安装的软件?我的意思是,如果我从控制面板上查看我安装的软件,并用SNMP和WMI面对结果,那么会有很多奇怪的事情


编辑:只是一个快速更新,我在.NETC#中开发了几个程序,安装在许多计算机上。可惜WMI和SNMP都找不到它们。我使用通常的VisualStudio生成的设置安装了这些程序。有什么提示吗?

人们基本上使用WMI来查询各种系统参数。WMI公开了许多可以利用的接口。它主要用于VBScript,但也可以使用C++/COM或C#与之交互。可以为您提供有关WMI的详细解释,然后您就可以了解Win32_产品类的功能。对于开始使用WMI的人来说,这是一本必读的书

请务必阅读以下文章:

这些文章将使您更好地理解WMI概念

就Windows installer而言:

Windows installer基于服务器-客户端体系结构。Windows安装程序实际上是一个Windows服务。Windows installer支持的各种功能使其成为应用程序生命周期管理的最标准方法。扩展名为.MSI的基本MSI(没有任何基本功能)包用于打包和分发应用程序

基本MSI包基本上是一个数据库。应用程序二进制文件和其他内容可以打包为CAB文件并包含在MSI包中,也可以存在于MSI包之外

这称为事务性安装方法。应用程序打包开发人员只需填写数据库中的各种表,Windows Installer引擎就可以处理所有其他事情。这看起来或听起来很简单,但非常困难,需要很多知识

当应用程序安装到任何系统上时,Windows Installer会将正确管理安装在系统上的所有资源所需的所有注册表项写入系统。由于应用程序的生命周期由Windows Installer管理,因此它可以轻松支持:

1) 修理

2) 弹性


一旦你经历了这一切,你可能会对你的案件中涉及的各方有更好的了解。然后您会有更清楚的问题(或者可能没有!),我们可以更好地帮助您(或者您可能根本不需要它!)。

如果您的应用程序安装正确,WMI应该能够查询其状态。请说明安装.NET C#应用程序时遇到的问题。除了我的.NET应用程序之外,还有许多其他软件无法通过SNMP或WMI检索。无论如何,我在安装自己的软件时没有问题,它们正确地出现在控制面板中。但是,注册表上没有卸载密钥,因此避免SNMP找到它。我的问题与WMI有关,因为我不知道Win32_产品是如何工作的。如果我知道它是如何工作的,我可以尝试修复它,如果没有解决方案,我可以放弃:D