Как установить флажок на «Не контролировано» из командной строки MSIEXEC?

StackOverflow https://stackoverflow.com/questions/2992006

  •  24-10-2019
  •  | 
  •  

Вопрос

У меня есть MSI (автор Wix), на котором есть флажок, связанный с пользовательским свойством (назовите его my_property). Я хотел бы запустить этот MSI из командной строки, указав 0 (без контроля) или 1 (проверено) для этого свойства. Мой скрипт определит соответствующее значение (на основе среды) и внедрит это значение в командную строку MSIEXEC. Моя командная строка выглядит примерно так:

msiexec /i my_installer.msi MY_PROPERTY=$value

Где $ value составляет 1 или 0, в зависимости от окружающей среды. Проблема в том, что независимо от того, какое значение я предоставляю для my_property в командной строке, флажок всегда проверяется (и свойство всегда будет установлено на 1). Единственный способ сделать флажок неконтролированным - это не указать свойство (оставьте его неопределенным). Следует отметить, что это поведение происходит независимо от того, показывает ли пользовательский интерфейс (добавление «/Quiet» к вышеуказанной командной строке не меняет такого поведения).

Этот пост MSDN Похоже, указывает, что это известная «ошибка» в установщике Windows (или, точнее, какую бы авторизационную систему написала MSI). В качестве решения предлагается взлом MSI после сборки. Мне интересно, столкнулся ли кто -нибудь эту проблему, и придумал лучший обходной путь/решение. Спасибо!

Обновлять

Я вижу три решения этой проблемы:

  1. От @Damien, имейте сценарий обертки, а не передать свойство MSIexec, когда его значение равна 0. Это делает скрипт более сложным и, вероятно, помешает мне переопределить значение флажества, который по умолчанию «проверяется».
  2. От @Michael Urman добавьте индивидуальное действие, которое очищает свойство, если его значение равно нулю. Это делает MSI более сложным, и мне придется добавить такое пользовательское действие для каждого флажества в пользовательском интерфейсе.
  3. Другая идея состоит в том, чтобы просто запретить использование флажков в наших установщиках MSI и вместо этого использовать радиосвязи или раскрытия для вопросов «True/False». Хотя это ограничивает параметры пользовательского интерфейса для наших установщиков, это позволяет сценариям обертки оставаться простыми и не требует пользовательских действий, чтобы «взломать» свойства.

В настоящее время я склоняюсь к варианту 3, хотя вариант 1, вероятно, является лучшим ответом на мой первоначальный вопрос. Какие-нибудь мысли?

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

Решение

Вот как он «предполагается» работать - в основном, свойство не существует, пока пользователь не проверит флажок, тогда оно «установлено» (существует). Поэтому, если вы хотите выполнить пользовательское действие при проверке флага, вы проверяете наличие свойства в качестве условия для выполнения пользовательского действия, вместо того, чтобы проверять значение, на которое устанавливается пользовательская опора.

Я думаю, что лучший способ обработать это из командной строки - это то, что вы уже упомянули: если вы хотите выбрать флажок, указать пользовательскую опору в командной строке, в противном случае, не будет, и флажок не будет выбран.

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

Как вы обнаружили, флажки верны (проверены), когда свойство определено (не бледно) и ложным (не контролируется), когда свойство не определен (пусто). Похоже, вам нужно преобразовать строку среды 1 или 0 в флажок True/false, где 1 или 0 передается в командной строке. Попробуйте использовать пользовательское действие SET-Property, которое устанавливает ваше свойство на {} (пусто) с условием, когда свойство уже "0". Анкет Запланируйте его на ранних этапах как в пользовательском интерфейсе, так и в установке последовательностей выполнения.

Позднее обновление: Что касается необходимости нескольких пользовательских действий для обработки этого для нескольких флажков, у вас есть выбор. Вы можете либо создать несколько действий по установке с установкой (выгода: легко сказать, что они делают; стоимость: многие из них), либо вы можете создать единое индивидуальное действие на основе кода, которое ходит Checkbox стол для списка свойств для преобразования из 0 Бланк (выгода: одно действие; стоимость: плохо документирован, пользовательский код). Второе преимущество для последнего подхода заключается в том, что вы можете справиться с необычным Value Настройки, такой флажок, который должен установить свойство на 0 Когда проверяется.

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