通过脚本检查 msi 安装程序中的特定功能

通过脚本检查 msi 安装程序中的特定功能

我需要能够从 msi 安装程序检查特定功能的安装情况。为了了解上下文,我需要检查 Team Foundation Server 2010 Power Tools 安装程序 (tfpt.msi) 是否安装了“Powershell Cmdlets”功能(Orca 中功能表中的 TFPS)。

我知道如何使用 WMI win32_product 和产品代码 {B6DC31D8-A303-4D14-9C88-59F183F55BEC} 检查产品本身的安装,但 TFPS 功能甚至不会默认安装,因此缺少它是很常见的。

这可能吗?

答案1

使用 MsiQueryFeatureState 应该可以做到。您可以使用 C++ 或其他语言来实现。在 VBScript 中,它将是这样的(请注意,这是针对不同的 MSI,请更新产品 GUID 和功能名称以满足您的目的):

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。这意味着该功能已在本地磁盘上本地安装。

以下是有关 C 风格 win32 调用的详细信息:http://msdn.microsoft.com/en-us/library/aa370361(v=vs.85).aspx

相关内容