Переопределение полей диалога «Текстовые поля» из командной строки в установщике MSI (Visual Studio 2010 Web Setup) - PullRequest
1 голос
/ 16 ноября 2011

Фон

У меня есть проект веб-настройки в Visual Studio 2010.

В разделе User Interface у меня есть настраиваемое диалоговое окно Textboxes.Эти текстовые поля имеют имена свойств, такие как EDITA1, EDITA2.

У меня есть Custom Action, который использует эти свойства:

CustomActionData = /foo="[EDITA1]" /bar="[EDITA2]" /zip="[BLARB]"

В коде для обработки этого настраиваемого действия эти параметрыдоступны в словаре Context.Parameters

public override void Install(System.Collections.IDictionary stateSaver) {
    string foo = Context.Parameters["foo"]; // originates in edit box EDITA1
    string bar = Context.Parameters["bar"]; // originates in edit box EDITA2
    string zip = Context.Parameters["zip"];

Проблема

Я хочу иметь возможность запустить программу установки из сценария без интерфейса, поэтому мне нужно передать значения для foo и bar через командную строку.Вы должны сделать это, добавив PROPERTY=VALUE к командной строке MSI, например:

msiexec /qn /i MyInstaller.msi EDITA1=John EDITA2=Smith BLARB=Donut

Но это не работает.Пользовательские параметры, которые не связаны с пользовательскими текстовыми полями do , отображаются.Например, BLARB проходит через очень хорошо (Параметры ["zip"] == "Пончик").Но свойства, связанные с текстовыми полями, не отображаются, как будто они обнуляются в пустом (но скрытом) диалоговом окне перед вызовом моей пользовательской функции установки.

Ответы [ 3 ]

0 голосов
/ 04 февраля 2013

Ну, я столкнулся с теми же проблемами, и после большого тестирования и отладки, следуя всем советам в Интернете, оказался беспомощным, пока не прочитал эту запись.

В сетиНастройка проекта, установите значение EDITA1 Value=[VARIABLE].В настраиваемом действии настраиваемые данные устанавливаются /va=[EDITA1]

Теперь, когда вы устанавливаете приложение через командную строку, вам нужно установить VARIABLE=data.Когда вы запускаете графический интерфейс, введите данные в текстовом поле.

Это работает, я также проверил и проверил в файле журнала.

0 голосов
/ 04 февраля 2016

Проблема заключается в том, что InstallExecuteSequence в сгенерированном файле MSI имеет некоторые пользовательские действия, такие как CustomTextA_SetProperty_EDIT1.Если вы посмотрите на это, оно фактически устанавливает значение свойства в null, даже если вы указали его в командной строке.Чтобы передать их из командной строки в MSI без вывода сообщений, вам нужно отредактировать файл MSI (например, с Orca) следующим образом:

  1. Удалить пользовательские действия в таблице InstallExecuteSequence с именамикак CustomTextA_SetProperty_EDIT1.

  2. В таблице свойств значение SecureCustomProperties добавьте все свойства редактирования, разделенные двоеточиями.Например, добавьте «; EDITA1» в существующий список.

0 голосов
/ 16 ноября 2011

Это не диалог, который переопределяет значения свойств. Файл журнала поможет вам определить причину изменения значения свойства.

...