У меня есть пользовательское действие в установщике MSI, который вносит некоторые изменения в некоторый конфигурационный файл. мое требование состоит в том, чтобы выполнить установку в "тихом" режиме, таким образом, я использую msiexec. Вот команда:
msiexec /i myInstaller.msi /l* out.txt myContextParameter=value1
myContextParameter
никогда не передается пользовательскому действию поэтому, когда я делаю context.Parameters["myContextParameter"]
Я получаю a null
значение.
Когда я выполняю свой MSI в режиме UI, параметр передается правильно. Я также удостоверился, что имя свойства правильно определяется в CustomActionData
.
Можете ли вы использовать API установщика через Java?
API является единственным поддерживаемым способом манипулирования файлами MSI. Если вы используете .NET или WIX, вы либо используете эти функции или функции, которые вызывают их.
Формат двоичного файла MSI недокументирован и может измениться между версиями, поэтому пытаясь прочитать / запись бинарного формата напрямую, просто собирается дать вам настоящую головную боль.
-121--5086225- Свойства
являются «частными» и не будут переданы в командной строке.
AllCaps
Свойства являются «публичными» и могут быть переданы в командной строке.
Однако только безопасные свойства пропускаются на «сервер» (I.E. сохраняется во время возвышения UAC). См. Документация по свойствам SecurCustomProperties .
Предполагая, что вы пытаетесь получить доступ к этому свойству в отложенном CA, это происходит на стороне сервера, поэтому вам нужно использовать публичное свойство (все CAPS), которые также помечены как безопасные.
Вот пример с использованием WIX:
<Property Id="MYPUBLICPROPERTY" Secure="yes" Value="{}">
Если вы хотите иметь возможность пропускать параметры из-за снаружи, вам необходимо использовать Allcaps в именах ваших параметров. Я знаю, что это звучит странно, но попробуй! : -)