脚本检查msi安装程序的特定function

我需要能够从msi安装程序检查特定function的安装。 对于上下文,我需要检查是否从Team Foundation Server 2010电源工具安装程序(tfpt.msi)安装了“Powershell Cmdlet”function(来自Orca中function表的TFPS)。

我知道如何使用WMI win32_product和产品代码{B6DC31D8-A303-4D14-9C88-59F183F55BEC}来检查产品本身的安装情况,但是TFPSfunction默认情况下甚至不会安装,所以它很常见。

这可能吗?

使用MsiQueryFeatureState应该做到这一点。 你可以从C ++或其他语言来完成。 在VBScript中,这将是这样的(请注意,这是一个不同的MSI,请更新产品GUID和function名称,以适应您的目的):

dim installer, state ' Connect to Windows Installer object set installer = CreateObject("WindowsInstaller.Installer") state = installer.featurestate ("{4F41AD68-89F2-4262-A32C-2F70B01FCE9E}","PhotoStory") If ( state = -2 ) then MsgBox "INSTALLSTATE_INVALIDARG" elseif (state = -1) then MsgBox "INSTALLSTATE_UNKNOWN" elseif (state = 2) then MsgBox "INSTALLSTATE_ABSENT" elseif (state = 2) then MsgBox "INSTALLSTATE_ADVERTISED" elseif (state = 3) then MsgBox "INSTALLSTATE_LOCAL" elseif (state = 4) then MsgBox "INSTALLSTATE_SOURCE" End If 

有趣的状态是INSTALLSTATE_LOCAL。 这意味着该function本地安装在本地磁盘上。

下面是有关C型win32调用的更多信息: http : //msdn.microsoft.com/en-us/library/aa370361( v=vs.85) .aspx