问题 13:如何列出特定计算机上已经安装的所有应用?

转载http://www.microsoft.com/china/technet/community/scriptcenter/resources/wmifaq.mspx#EXEAE

 

Win32_Product WMI 类代表通过 Windows Installer 安装的所有应用程序。但是,这个 WMI 类可能不会列出所有出现在‘添加/删除程序’中的程序。 解决该问题的一种方法是从注册表中搜集已安装程序的信息(注意:并不是所有程序在安装的时候都会向注册表写入信息)。本主题给出了达到此目的的两种方法:使用脚本直接读取注册表中的信息,使用 MOF 文件和脚本从 WMI 中获取该信息。

1.

以下脚本用于列出计算机上已经安装的应用程序。使用 WMI System Registry Provider 直接从注册表中搜集信息的脚本:

strHost = "."
Const HKLM = &H80000002
Set objReg = GetObject("winmgmts://" & strHost & _
    "/root/default:StdRegProv")
Const strBaseKey = _
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\"
objReg.EnumKey HKLM, strBaseKey, arrSubKeys
 
For Each strSubKey In arrSubKeys
    intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _
        "DisplayName", strValue)
    If intRet <> 0 Then
        intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _
        "QuietDisplayName", strValue)
    End If
    If (strValue <> "") and (intRet = 0) Then
        WScript.Echo strValue
    End If
Next

2.

以下 MOF 文件和它的配套脚本展示了另外一种从注册表中获取已安装应用的方法。如果使用 MOF 文件,请按以下步骤操作:

步骤 1:复制以下 MOF 语法到记事本并保存为一个 .MOF 文件(例如 products.mof)。

qualifier dynamic:ToInstance;
qualifier ProviderClsid:ToInstance;
qualifier ClassContext:ToInstance;
qualifier propertycontext:ToInstance; 
 
[dynamic, provider("RegProv"),
ProviderClsid("{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}"),
ClassContext
("local|HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
] 
class Products {
   [key] string KeyName;
   [read, propertycontext("DisplayName")]      string DisplayName;
   [read, propertycontext("DisplayVersion")]      string  DisplayVersion;
   [read, propertycontext("InstallLocation")]      string InstallLocation;
};

步骤 2:在命令提示行键入 mofcomp products.mof.该命令将 MOF 文件存入 WMI 存储库。

步骤 3:MOF 存入存储库之后,使用以下脚本获取数据。

strComputer = "." 
Set WMI = GetObject("winmgmts:\\" & strComputer & _
    "\root\default")
Set colItems = WMI.ExecQuery("Select * from Products")
For Each objItem In colItems
    WScript.Echo "DisplayName: "  & objItem.DisplayName
    WScript.Echo "DisplayVersion: " & objItem.DisplayVersion
    WScript.Echo "InstallLocation: " & objItem.InstallLocation
    WScript.Echo "KeyName: " & objItem.KeyName
Next
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐