1

好吧,我不在我的元素,但無論如何這裏。我可以從Windows批處理文件運行Windows Installer(msiexec)嗎?

我需要做一個供應商提供的Windows程序的無提示安裝。供應商提供了一個MSI文件以用於安裝。我創建了一個bat文件運行包含以下行MSIEXEC:

msiexec /i "C:\archibussilent\afm\ARCHIBUS 19.msi" /L*V C:\archibussilent\log\msi_SETUP.log 

當我執行批處理文件中的錯誤對話框彈出,上面寫着:

「此安裝無法通過直接啓動MSI運行。包你必須要運行setup.exe」

和MSIEXE錯誤日誌中說:

MSI (c) (80:B0) [15:48:02:588]: Note: 1: 1729 
MSI (c) (80:B0) [15:48:02:589]: Product: ARCHIBUS 19 -- Configuration failed. 
MSI (c) (80:B0) [15:48:02:590]: Windows Installer reconfigured the product. Product Name: ARCHIBUS 19. Product Version: 19.3.30032.003. Product Language: 1033. Manufacturer: ARCHIBUS, Inc.. Reconfiguration success or error status: 1603. 

錯誤#1603是這意味着權限問題,但我檢查了訪問權限並沒有發現任何問題。

難道不運行Setup.exe就無法運行msiexe嗎?

任何幫助表示讚賞 - 謝謝。

回答

1

「您必須運行setup.exe」是供應商撰寫的要求,通常不是針對MSI的。他們可能有一個很好的理由,或者他們可能只是將它作爲門禁檢查而不必測試其他場景。

您必須使用ORCA編輯MSI,然後查看LaunchCondition和InstallExecuteSequence表以瞭解它們的實現方式。然後,您可以創建一個轉換來繞過檢查或可能傳遞一個屬性,例如SETUPEXEDRIVEN = 1以模擬從setup.exe調用。 (一個特別大且衆所周知的安裝程序開發產品會在您創建setup.exe時將其傳遞到它們的MSI中。)

setup.exe可能用於某個目的。例如,可能需要使用需要提升的清單創作它,或者可能正在下載和安裝先決條件,或者可能確保將MSI緩存到指定位置供將來的安裝事務使用。

此外,我假設你想添加一個/ QB或/ QN使安裝無聲。您還需要在調用之前提升cmd會話,因爲MSI在靜默安裝時不支持UAC提示。

1

這是最有可能使用InstallshieldInstallscript MSI文件進行。這是一個非標準的MSI文件,具有更高級的圖形用戶界面和其他一些優點。在我看來,這是一個特別有問題的設置類型由於幾個嚴重的錯誤沒有適當的解決方法。我始終推薦這個項目類型永遠不會被使用。這對企業部署尤其有問題。

這些設置的功能號碼爲command line parameters for the setup.exe file。正如Chris所說,你可以通過轉換來運行它,並設置屬性SETUPEXEDRIVEN=1,你可以嘗試使用setup.exe /a來運行管理員安裝(更多信息:purpose of an admin install)。這將從MSI中提取所有cab文件(如果有的話),並將這些文件放在「網絡安裝位置」上,以便在公司網絡中使用 - 本質上它是一個較小的MSI,其旁邊有安裝文件。我已經看到了可以直接從MSI運行的設置 - 只需要一個鏡頭即可。

至於爲什麼這些設置需要SETUP.EXE啓動原因:

  • InstallShield中之前版本的INSTALLSCRIPT語言運行庫必須在發佈前獲得基於INSTALLSCRIPT MSI安裝。這似乎不再是這種情況,因爲Installscript現在在沒有運行時的情況下運行。
  • setup.exe用於安裝Windows安裝程序引擎(msiexec.exe)的任何更新,並且可能需要setup.exe啓動程序。這種更新很少需要,現在應通過Windows更新完成。
  • 許多遺留功能,如能夠通過setup.exe訪問Internet(!)(非常不適合企業使用),下載運行時和組件以及提取臨時文件也可以通過setup.exe完成。
  • 而且還有其他功能,其中大多數功能對於企業部署而言是不合需要的。

這裏是一個previous answer從我這裏看到一個類似的問題,其中包含一個帶有實際示例命令行的PDF鏈接。

相關問題