簡體   English   中英

如何在 Github 操作上執行 MSI 文件(Windows 最新運行程序)

[英]How to execute MSI file on Github Actions (windows-latest runner)

語境

我創建了一個 Github Actions 工作流,該工作流生成一個我不想在之后執行的.msi文件來測試應用程序是否按預期工作。

工作流實現如下

build-windows:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v2.3.4
      - name: Create binary from branch
        run: |
          choco install make
          make build-windows
      - name: Generate msi
        shell: powershell
        run: .\.github\scripts\windows\gen-win.ps1
      - name: Install msi
        run: |
          echo "Start Msiexec"
          msiexec /qn /i "file.msi" /L*vx!
          echo "End Msiexec"

基本上,這個工作流會創建.exe文件( Create binary from branch文件步驟),然后使用 powershell 中的腳本生成.msi文件( Generate msi步驟),最后嘗試安裝.msi文件( Install msi步驟)。


問題

問題出現在Install msi步驟,運行器日志僅返回:

Start Msiexec
End Msiexec

...不顯示任何日志,或創建目錄和文件,就像安裝應該在$HOME目錄上做的那樣。


我試過的

使用默認 shell for windows-latest runner(即cmdlet ),我嘗試在工作流中運行這些命令,但沒有成功,使用"file.msi""path/to/file.msi"

msiexec /i "file.msi"
msiexec /qn /i "file.msi"
msiexec /qn /i "file.msi" /L*vx!

我對 windows 操作系統不是很熟悉,但是對於我在網上搜索的內容,這個 msiexec 命令應該可以工作。

我還嘗試使用這些命令成功地在 windows 10 計算機上安裝手動生成的.msi文件(因此生成的.msi文件有效並且在本地工作)。 但是,它會打開另一個提示 window自動顯示安裝和設置日志(它不在同一個終端窗口中),我想這可能不會發生在 Github 操作上。


問題

➡️如何通過 windows-latest 運行器上的命令行從.msi文件安裝此應用程序?

Github 社區論壇上問了同樣的問題后,我從@Simran-B (Github 咨詢委員會成員)那里得到了以下答案:

msiexec 似乎沒有向終端記錄任何內容。 如果您的 MSI 有(即使在單獨的窗口中),那么它必須是特定於該 MSI 的東西……

msiexec 支持的是記錄到文件。 基於Is there Anyway to get msiexec to echo to stdout instead of logging to a file - Server Fault ,我成功運行了以下 PowerShell 腳本(使用 Blender MSI 作為測試):

$file = "file.msi" 
$log = "install.log" 
$procMain = Start-Process "msiexec" "/i `"$file`" /qn /l*! `"$log`"" -NoNewWindow -PassThru
$procLog = Start-Process "powershell" "Get-Content -Path `"$log`" -Wait" -NoNewWindow -PassThru 
$procMain.WaitForExit() 
$procLog.Kill()

我不能推薦/l*vx! ,因為每個日志行的強制刷新會使事情變慢,而帶有附加調試信息的冗長 output 會產生數千行。 或者,您可以在不刷新的情況下將所有內容記錄到文件中,等待msiexec退出,然后在 go 中將文件內容打印到控制台,這應該會更快(但您會丟失實時日志記錄)。

如果我沒記錯的話,GitHub 托管的運行器默認使用提升的權限。 在我的本地測試中,我必須從提升的 PowerShell 運行上述腳本,因為 MSI 試圖安裝到C:\Program Files\ . 如果.msi路徑有問題,您可能會得到 1619 ( $procMain.ExitCode ) 的退出代碼,這也不是很直觀。 沒有安裝的另一個可能原因(至少很明顯)可能是您實際上並沒有等待msiexec完成 - 命令立即返回並且安裝過程在后台運行。 您可以使用帶有-Wait選項的 Start-Process 或使用 -PassThru 獲取句柄並在其上調用.WaitForExit()以等待它完成。

它對我有用,使用這些命令,我可以執行.msi文件來安裝軟件,然后在我的 github 操作工作流程中使用它來執行我的測試!

暫無
暫無

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

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