簡體   English   中英

如何在命令行上將MSM文件轉換為MSI文件? 使用Windows Installer SDK或COM進行此操作

[英]How to convert an MSM file into an MSI file on the command line? Doing this with the Windows Installer SDK, or COM

我有第三方工具提供的MSM文件。 我們使用一個小的腳本來自定義MSM,並且此工具已集成到我們的安裝程序中,並且運行良好。 所有修改都是通過VBscript使用COM和“ WindowsInstaller.Installer”完成的

但是有時我們的支持人員只需要將此工具作為獨立的安裝程序包即可。

有沒有一種簡單的方法可以在命令行上將MSM文件轉換為完整的安裝程序MSI軟件包?

可以將VBscript或COM模塊與“ WindowsInstaller.Installer”一起使用。 知道如何進行轉換,我還將編寫一個小型C ++程序來執行更改並設置適當的信息和轉換。

我需要通過命令行將MSM轉換集成到我們的構建過程中。

我搜索和發現的內容:

我在SDK中看到了一些工具,例如ORCA和其他MSI工具,但是沒有一個工具可以滿足我的需求。 ORCA可以將MSM保存為MSI文件,但是在命令行上看不到執行此操作的選項。

注意:我找到了一個舊工具msm2msi,但是它不適用於我的MSM文件並崩潰,並且沒有可用的源。

編輯關於我們應用的更改:

更改的原因很簡單。 第三方模塊具有“所謂的服務器模式”,通常僅在一台計算機上使用,但是MSM會在每台計算機上啟用該模塊。 因此wie決定在更改屬性時將其禁用。 還有更多變化。

因此,它更多地與主要安裝有關。 更新到來時,將永遠不會觸碰此設置。

另外,MSM會安裝自己不需要的UI。 所有控制都是通過我們的軟件完成的...因此,我們安裝了組件,但刪除了Start文件夾中的菜單項。

任何MSI工具都可以使用MSM文件並從中編譯MSI ,還可以使用所需的任何其他結構-可以想象您對MSM所做的更改?

免費和開放源代碼的WiX Toolkit當然可以通過命令行從MSI編譯MSI,它也是免費和開放源代碼的。 WiX快速入門建議

但是,您打算在MSM中進行的修改會引起您的擔憂。 實際上,這確實是一個壞消息,因為MSM文件是專門為最終用戶所更改的。 如果您能找到一種替代方法來進行所需的更改,例如在編譯的MSI文件中進行自定義操作,那將是非常好的。

盡管有時需要大量地處理WiX,但合並和MSM卻不那么簡單:

<DirectoryRef Id="TARGETDIR">
    <Merge Id="VCRedist" SourceFile="MySourceFiles\Microsoft_VC80_CRT_x86.msm" DiskId="1" Language="0"/>
</DirectoryRef>

<Feature Id="VCRedist" Title="Visual C++ 8.0 Runtime" AllowAdvertise="no" Display="hidden" Level="1">
    <MergeRef Id="VCRedist"/>
</Feature>

完整示例在這里: 如何:使用安裝程序安裝Visual C ++ Redistributable 和文檔: Merge Element

為什么每次都要合並此MSM? 它會不斷更新嗎? 如果是這樣,供應商可以更改它,以便您不需要后處理它嗎? 如果未更新,您是否可以更改MSM本身? 做起來並不好-實際上很糟糕-但與不斷修改設置相比,它更容易出錯。

Transforms&msiexec.exe :使用更新的信息,我想說您可以通過使用轉換,甚至可能通過安裝命令行設置屬性來解決所有這些問題。

轉換允許您更改MSI / MSM中的“任何內容”(在運行時應用了很少的數據庫片段來更改MSI / MSM),設置PUBLIC PROPERTY(始終為大寫)可以影響該屬性設計的任何影響。 因此,后者是由供應商添加並支持的MSI / MSM的“輕量級”自定義,雖然自定義很好,但根據我的經驗很少(通常用於添加許可證密鑰或服務器IP或URL或安裝) MSI的一部分-一些功能-類似的簡單內容)。

可以在下面找到有關如何使用transformsmsiexec.exe命令行來自定義MSI安裝的說明:


GUI :當MSM“安裝在其自己的GUI中”時,我真的不明白您指的是什么? 希望這只是從開始菜單啟動可執行文件的快捷方式嗎? 如果是這樣,您可以輕松地使用轉換將其刪除。


創建轉換 :可以使用Orca (MS SDK工具)或任何其他MSI部署工具來創建轉換,也可以使用MSI APIWin32,COM,.NET )以編程方式創建轉換。

  • COM自動化Microsoft MSI SDK包含一個名為WiGenXfm.vbsVBScript 如果安裝了Visual Studio,則將安裝它。 您也可以在github.com上找到它(但是請確保從您自己的磁盤上獲取它)。

  • DTF / .NET是WiX的組件,它使您可以通過托管代碼訪問MSI API。 互操作已為您完成。 樣品在這里

  • C ++ / Win32和底層的Win32 (不接受替代品-層消失了:-))。


注意 :DTF是作為WiX工具包的一部分安裝的。 能夠構建MSI文件的開源工具包( 快速入門建議 )。 安裝后,在%ProgramFiles (x86)%下的WiX安裝文件夾中找到dll。 子文件夾“ bin ”。 在此處進行文件描述 最后,我將簡要介紹DTF的實際使用 ,以從MSI文件中獲取一些屬性。

暫無
暫無

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

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