Назад | Перейти на главную страницу

Скриптовая проверка конкретной функции из установщика msi

Мне нужно проверить установку определенной функции из установщика 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