Я хочу, чтобы установщик запустил скрипт 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 =""[POWERSHELLEXE]" -Version 3.0 -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command "& '[#SOMESCRIPT]' ; exit $$($Error.Count)"" />
<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-файл, не полагаясь на файл, который создается только после установки. Сообщение об ошибке состоит в том, что он не может найти скрипт, потому что он еще не установлен. Я на самом деле не хочу, чтобы файл скрипта помещался в папку для начала, я просто хочу, чтобы скрипт запускался внутри установщика и больше ничего не делал с файлом скрипта.