Можно ли встроить скрипт PowerShell в установщик и запустить его оттуда вместо места с помощью Wix? - PullRequest
0 голосов
/ 28 октября 2019

Я хочу, чтобы установщик запустил скрипт PowerShell перед установкой всех остальных файлов. Однако, как он собирается в настоящее время, он работает только для запуска скрипта, когда установка завершена, потому что он помещает скрипт powershell в целевой каталог. Теперь это, вероятно, можно исправить, сделав каталог всегда существующим. Однако я не хочу постоянно предоставлять скрипт установщику, я хочу, чтобы скрипт был встроен в установщик и запускался оттуда или, по крайней мере, запускал команды, которые есть в файле скрипта.

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

Ниже приведен фрагмент кода, в котором предоставляется вся логика для запуска сценария powershell:

<DirectoryRef Id="INSTALLFOLDER">
  <Component Id ="SOMESCRIPT" Guid="">
    <File Id="SOMESCRIPT" Name="My-Script.ps1" Source="My-Script.ps1" />
  </Component>
</DirectoryRef>

<Property Id="POWERSHELLEXE">
  <RegistrySearch Id="POWERSHELLEXE"
                  Type="raw"
                  Root="HKLM"
                  Key="SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
                  Name="Path" />
</Property>

<Condition Message="This application requires Windows PowerShell.">
  <![CDATA[Installed OR POWERSHELLEXE]]>
</Condition>

<SetProperty Id="PSscript"
         After="PSscript"
         Sequence="execute"
         Value ="&quot;[POWERSHELLEXE]&quot; -Version 3.0 -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command &quot;&amp; '[#SOMESCRIPT]' ; exit $$($Error.Count)&quot;" />

<CustomAction Id="PSscript"
              BinaryKey="WixCA"
              DllEntry="WixQuietExec"
              Execute="deferred"
              Return="check"
              Impersonate="yes" />

<InstallExecuteSequence>
  <Custom Action="PSscript" After="InstallInitialize"><![CDATA[NOT Installed]]></Custom>
</InstallExecuteSequence>

Ожидаемый результат - встроенный сценарийв MSI-файл, не полагаясь на файл, который создается только после установки. Сообщение об ошибке состоит в том, что он не может найти скрипт, потому что он еще не установлен. Я на самом деле не хочу, чтобы файл скрипта помещался в папку для начала, я просто хочу, чтобы скрипт запускался внутри установщика и больше ничего не делал с файлом скрипта.

1 Ответ

1 голос
/ 29 октября 2019

Это единственное расширение PS Wix, которое я смог найти в Интернете, но, похоже, это может быть ограничено и вашим сценарием.

Для поддержки запуска скриптов до их установки мы (в Advanced Installer ) создал предопределенную поддержку для извлечения сценария PS в качестве временного файла при запуске установки и его запуска из этого временного расположения. Не знаю, есть ли у Wix аналогичная поддержка.

Раскрытие информации: я работаю над созданием команды Advanced Installer.

...