У меня есть 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-взлом после сборки. Мне интересно, сталкивался ли кто-нибудь с этой проблемой и придумал лучший обходной путь / решение. Спасибо!
Обновление
Я вижу три решения этой проблемы:
- От @Damien, чтобы скрипт-обёртка не передавал свойство в msiexec, когда его значение равно 0. Это делает скрипт более сложным и, вероятно, помешало бы мне переопределить значение флажка, который по умолчанию установлен на ».
- От @Michael Urman добавьте настраиваемое действие, которое очищает свойство, если его значение равно нулю. Это делает MSI более сложным, и мне пришлось бы добавлять такое настраиваемое действие для каждого флажка в пользовательском интерфейсе.
- Другая идея состоит в том, чтобы просто запретить использование флажков в наших установщиках msi и использовать вместо них переключатели или раскрывающиеся списки для вопросов «истина / ложь». Хотя это ограничивает параметры пользовательского интерфейса для наших установщиков, оно позволяет сценариям-оболочкам оставаться простыми и не требует специальных действий для «взлома» свойств.
В настоящее время я склоняюсь к варианту 3, хотя вариант 1, вероятно, является лучшим ответом на мой исходный вопрос. Есть мысли?