我需要能够从 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