2

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

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

Win32_Product WMI 类表示由 Windows Installer 安装的产品。一个产品通常与一个安装包相关联。

这意味着什么?最后但并非最不重要的一点是,有没有办法改进已安装软件的检索方式?我的意思是,如果我从控制面板查看已安装的软件并使用 SNMP 和 WMI 处理结果,就会发现很多奇怪的东西。

编辑:只是一个快速更新,我用 .NET C# 开发了几个程序,我安装在许多计算机上。太糟糕了,WMI 和 SNMP 都没有发现它们。我使用通常的 Visual Studio 生成的设置安装了这些程序。有什么提示吗?

4

1 回答 1

3

人们基本上使用WMI来查询各种系统参数。WMI 公开了许多可以利用的接口。它主要与 VBScript 一起使用,但也可以使用 C++/COM 或 C# 与之交互。这篇维基百科文章可以给你一个关于 WMI 的详细解释,然后你就可以理解 Win32_Product Class 的作用。这是另一篇很棒的文章,对于开始使用 WMI 的人来说是必读的。

还要仔细阅读这些文章:

检索 CLASS

检索实例

检索实例的一部分

访问限定符

这些文章将使您对 WMI 概念有一个很好的理解。

就 Windows 安装程序而言:

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

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

这称为 TRANSACTIONAL 安装方法。应用程序打包开发人员只需填写数据库中的各种表,Windows Installer 引擎会处理其他所有事情。这可能看起来或听起来很容易,但非常困难并且需要大量知识。

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

1) 维修

2) 弹性

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

于 2012-06-14T06:38:29.290 回答