Мне нужно проверить установку определенной функции из установщика msi. Для контекста мне нужно проверить, была ли функция «Командлеты Powershell» (TFPS из таблицы функций в Orca) была установлена из установщика Team Foundation Server 2010 Power Tools (tfpt.msi).
Я знаю, как проверить установку самого продукта с помощью WMI win32_product и кода продукта {B6DC31D8-A303-4D14-9C88-59F183F55BEC}, но функция TFPS даже не устанавливается по умолчанию, поэтому ее часто не хватает .
Это возможно?
Это должно сделать использование 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. Это означает, что компонент устанавливается локально на локальный диск.
Вот дополнительная информация о вызове win32 в стиле C: http://msdn.microsoft.com/en-us/library/aa370361(v=vs.85).aspx