Обмани MSI API, думая, что установлен код обновления - PullRequest
0 голосов
/ 01 июня 2018

Я тестирую совместимость двух продуктов (A) и (B) в рамках проекта TestAutomation.Тест проверяет, что продукт (B), который фактически является тестируемым продуктом, может быть установлен даже после того, как (A) уже установлен -> для этого установщик (B) ищет, если UpgradeCode из (A) присутствует.

ПРИМЕЧАНИЕ. Я уже знаю код обновления (A).То, что я пытаюсь сделать, это записать это в таблицу, которая будет проверена после установки (B), БЕЗ фактической установки MSI (A) - это как «насмешка» в интеграции-testing.

Тест выполняется на виртуальной машине, где (A) еще не установлена ​​по умолчанию.Моей целью было бы написать сценарий, который позволил бы мне пропустить «настоящую» установку (A).

ВОПРОСЫ:

  1. Я не уверен вгде это выглядит UpgradeCode вверх. НЕ ищет его в реестрах (я уже пробовал этот взлом).Я обнаружил код UpgradeCode в таблице Win32_Property ... это правильное место, чтобы посмотреть?

  2. Я думаю, что я должен эмулировать вызов API, с помощью которого оригинальныйMSI из (A) устанавливает свой UpgradeCode ... есть идеи, как это работает?Возможно, с помощью скрипта Powershell.Я видел, как в Интернете люди могли изменять таблицы свойств WMI с помощью вызовов gwmi (затем с помощью put) или swmi , но все мои попытки пока не увенчались успехом.

ПРИМЕЧАНИЯ:

  • Я не очень разбираюсь в установщике Windows и в PowerShell ... это совсем не то, что я обычно делаю.Ответ в терминах Layman был бы очень признателен.
  • Я знаю, что есть другие способы обойти это (например, выделенная виртуальная машина или выполнение «реальной» установки (A)), но я хотел бы знатькак достичь этого программно.
  • Зачем мне это нужно?Это автоматический тест, который касается только установщика (B).Я не хочу, чтобы успех моего теста зависел от успешной загрузки или установки (A).

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Самый простой способ выполнить тест без установки фактического A - это создать небольшой MSI с тем же UpgradeCode и ProductCode и установить его.Я не понимаю, почему вы хотите «подделать» это, когда вы можете просто сделать реальную вещь.

Если вы хотите предотвратить установку B, когда A уже установлен, вы можете добавить UpgradeCode A в B с помощьюOnlyDetect = yes, это установит свойство, которое можно использовать для предотвращения установки B.Непонятно, в каком контексте не устанавливается B, есть ли у вас внешние программы запуска, загрузчик или какой инструмент используется для генерации MSI (потому что некоторые инструменты помогут вам, если вы хотите пропустить B, если A установлен сих встроенные функции обнаружения).

0 голосов
/ 01 июня 2018

Вы можете получить код обновления через WMI (Win32_Property таблица WMI) или через MSI API (Windows Installer Database - реестр).

Я бы не стал взламывать код обновления в базе данных установщика Windows по любой причине .Зачем вам подделывать код UpgradeCode?Является ли установка product A очень большой?

  1. WMI / PowerShell / VBScript :

  2. MSI API :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...