Неправильно выполнен сценарий PowerShell для настраиваемого действия установщика Wix - PullRequest
0 голосов
/ 03 декабря 2018

Во время установки мне нужно настроить некоторые файлы конфигурации, которые в основном предназначены для поиска и замены определенных ключевых слов, заданных в качестве свойств для инсталлятора msi.Настраиваемое действие выглядит следующим образом:

 <CustomAction Id="SetApplicationProperties"
    Directory="CONFIG.DIR"
    ExeCommand="powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command &quot;cat application.properties.template | % { $_ -replace 'SERVERNAME','[SERVERNAME]' } > application.properties.customer&quot; "
    Execute="deferred"
    Impersonate="no"
  />

Однако я получаю только пустой файл "application.properties.customer".нет ошибок / предупреждений в установочном файле журнала.Я пробовал различные комбинации цитирования строк, но без успеха.Сокращение команды до:

ExeCommand='powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command "cat application.properties.template  > application.properties.test" '

работает, поэтому возникает проблема с цитированием оператора "-replace ...".

Есть ли у кого-нибудь какие-либо предложения, как правильно установитьцитаты для установщика?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Тем временем я сам нашел решение этой проблемы, после некоторых проб и ошибок, и выяснил, что «{» и «}» были исключены во время «перевода» из проекта в исполнение.Я нашел эту ссылку полезной в качестве отправной точки для дальнейших экспериментов.Результатом является то, что [\{] VALUE [\}] может использоваться, чтобы "избежать" скобокРабочий код теперь выглядит так:

  ExeCommand="powershell -NoLogo -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command &quot;cat application.properties.template | % [\{] $_ -replace '&lt;SERVERNAME&gt;','[SERVERNAME]' [\}] > application.properties.customer 2>&amp;1 &quot; "
0 голосов
/ 04 декабря 2018

CA PowerShell считается опасным : использование PowerShell для пользовательских действий - очень плохое требование времени выполнения для запуска.Это и сценарий, и управляемый код - оба по-своему проблематичны.Сценарии, как правило, трудно отлаживать и могут вызывать антивирусные блокировки, а управляемый код зависит от среды выполнения .NET и имеет ряд известных технических ошибок (проблемы с версиями, поведение при загрузке версии CLR, есть много других проблем)..). Избегайте пользовательских действий PowerShell, если вы можете .

Обновления XML : Это файл XML?Если это так, может быть, вы можете попробовать собственные функции обновления XML в WiX?Возможно, вы увидите ответ: Добавлен новый параметр приложения в app.config, но MSI не установит его (не перезаписывает) .

JSON : Если это JSON, позвольте мне дать вам ссылку , которой я до сих пор не пользовался.Все, что я нашел в моих закладках.Разграбление github.com - это общий подход для меня.Просто выполните поиск.

INI : Может быть, даже в формате INI?Если так, у меня нет образцов для вас.Коммерческие инструменты InstallShield и Advanced Installer позволяют получать значения из файлов INI.Встроенные функции MSI, вероятно, слишком причудливы для этого (проблемы с кодированием, ограниченный набор функций).Я не уверен, что WiX имеет расширенную поддержку для получения значений файла INI.

...