[英]Is it possible to embed a PowerShell script inside the installer and run it from there instead of a location, using Wix?
我想讓安裝程序在安裝所有其他文件之前運行 PowerShell 腳本。 但是,它目前是如何構建的,它只能在安裝完成后運行腳本,因為它將 powershell 腳本放在目標目錄中。 現在,這可能可以通過使目錄始終存在來解決。 但是,我不想一直為安裝程序提供腳本,我希望將腳本嵌入到安裝程序中並從那里運行,或者至少運行腳本文件中的命令。
我嘗試將自定義操作的“After”更改為“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 文件中,而不依賴於僅在安裝后創建的文件。 錯誤消息是它找不到腳本,因為它尚未安裝。 我實際上不希望將腳本文件放在文件夾中,我只希望腳本在安裝程序中運行,並且不對腳本文件執行任何其他操作。
這是我可以在網上找到的 Wix 的唯一 PS 擴展,但似乎這也可能僅限於您的場景。
為了支持在安裝之前運行腳本,我們(在Advanced Installer中)創建了一個預定義的支持,以便在啟動安裝時將 PS 腳本提取為臨時文件並從該臨時位置執行它。 如果 Wix 有類似的支持,我不知道。
披露:我在團隊建設 Advanced Installer 工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.