Вопрос

Я использую VisualStudio2005 и vdproj для создания простого MSI-файла.Мне нужно передать свойство REINSTALLMODE при его запуске.

Я знаю, что это можно сделать через командную строку, вот так:msiexec.exe /i foo.msi REINSTALLMODE=amus

Однако, если пользователь решит щелкнуть msi напрямую (запустив мастер), свойство не передается.Возможно ли это сделать с помощью VS и vdproj?

Некоторые варианты, которые я исследовал:

  • Когда я создаю MSI через VS, он также выдает setup.exe.Возможно, есть ли способ передать свойство REINSTALLMODE через это?
  • Я установил Orca, который позволяет мне просматривать / редактировать таблицу свойств MSI.Я мог бы добавить его таким образом, но тогда мне пришлось бы добавлять его каждый раз, когда я выполняю сборку MSI.

Спасибо за любой совет.

Это было полезно?

Решение

К сожалению, я не могу найти способ установить другие свойства MSI прямо в VStudio.

Тем не менее, один из методов, который должен сработать, заключается в следующем:

  1. Используйте Orca для создания преобразования (MST), которое изменяет только свойство REINSTALLMODE.(Короче говоря, вы редактируете свойство и сохраняете как новое преобразование, затем используете команду "Сгенерировать преобразование" для создания MST.)
  2. Это преобразование может быть применено непосредственно к вашему MSI с помощью MSITRAN.EXE команда (доступна в том же пакете SDK установщика Windows, где вы нашли Orca).
  3. Вы могли бы либо:(a) найдите способ, чтобы Visual Studio всегда запускала вашу команду MSITRAN сразу после сборки MSI, или (b) просто запустите ваш MSITRAN вручную (из пакетного файла или подобного) после сборки, но перед тестированием.

Другие советы

Я нашел более автоматизированный способ сделать это.

Создайте скрипт с именем add_reinstall_prop.vbs(пример) со следующим:

set objArgs = WScript.Arguments
set o_installer = CreateObject("WindowsInstaller.Installer")
set o_database = o_Installer.OpenDatabase(objArgs(0), 1)
s_SQL = "INSERT INTO Property (Property, Value) Values( 'REINSTALLMODE', 'amus')"
set o_MSIView = o_DataBase.OpenView( s_SQL)
o_MSIView.Execute
o_DataBase.Commit

Добавьте событие после сборки в свой проект установки, вызвав сценарий со следующим:

add_reinstall_prop.vbs $(BuiltOuputPath)

Это автоматически добавит нужную запись во встроенный MSI.Затем вы можете проверить это с помощью Orca и увидеть, что запись теперь добавляется автоматически после сборки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top