簡體   English   中英

是否可以在安裝程序中嵌入 PowerShell 腳本並使用 Wix 從那里而不是位置運行它?

[英]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 ="&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 文件中,而不依賴於僅在安裝后創建的文件。 錯誤消息是它找不到腳本,因為它尚未安裝。 我實際上不希望將腳本文件放在文件夾中,我只希望腳本在安裝程序中運行,並且不對腳本文件執行任何其他操作。

這是我可以在網上找到的 Wix 的唯一 PS 擴展,但似乎這也可能僅限於您的場景。

為了支持在安裝之前運行腳本,我們(在Advanced Installer中)創建了一個預定義的支持,以便在啟動安裝時將 PS 腳本提取為臨時文件並從該臨時位置執行它。 如果 Wix 有類似的支持,我不知道。

披露:我在團隊建設 Advanced Installer 工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM