2010-03-19 54 views
7

我們的團隊最近一直在考慮向用戶推出一個小的註冊表修復程序,以修改一個特定的問題密鑰。非常簡單的東西,只需要更新註冊表中的1個鍵/值。手動創建MSI補丁(.msp)?

因此,目前我們正在使用Wix爲產品構建.msi安裝程序。雖然尋找到維克斯的生成.msp修補程序文件的支持,似乎是創建一個.msp的唯一方式是有點過於複雜的多步驟的過程:

  1. 獲取原始MSI的副本,編譯的固定MSI
  2. 新副本寫指向安裝者
  3. 編譯維克斯文件與蠟燭.wixobj到.psp
  4. 運行手電筒/火焰兵在之前一個新的維克斯文件/後的快照原始安裝程序和.psp,或者使用MsiMsp.exe

現在我的問題是,我不能簡單地將註冊表更改爲Wix文件並將其直接編譯到.msp中,而無需執行第1步和第4步 - 這對於簡單的更改而言是一項巨大的努力?

回答

7

否。補丁是兩個可安裝圖像的增量。要生成增量,即使差異非常小,您也需要這兩個圖像。

+1

解釋是正確的。您只是描述了創建兩個圖像的手動方法。 – 2011-11-26 02:09:23

2

可以使用Orca和Windows Install SDK中的其他工具(現在是Windows SDK的一部分)創建MSP(修補程序)和MST(轉換)。但是,這個過程可能不會比你已經擁有的WiX更容易。

Here是我能用幾分鐘的Google搜索找到的最好解釋;不過,我仍然懷疑那裏肯定有更好的東西。但是,如果您熟悉Windows Installer格式,那麼使用Orca進行探索和嘗試一些操作非常簡單,直到掌握了它爲止。

3

是的,還有另外一種方法,即使你可能認爲它同樣複雜:

  1. 創建管理員安裝你的「基礎版」使用msiexec /qn /a <msi-file> TARGETDIR=<absolute-path-of-existing-directory>(如果你從make文件或其他腳本運行此在命令前)使用start /wait,說成%BASEDIR%
  2. 重複以上,但進入%UPDDIR%
  3. 現在,你有內部%UPDDIR%解壓安裝,讓您更改.msi文件,將在根該文件夾的...您還應該更改版本號...
    • 如果您交換文件,請確保爲包含版本信息的文件更新散列表(MsiFileHash)或File表。
    • 如果你只是改變一些註冊表值,你應該沒問題,沒關係......
  4. 現在準備.pcp(修補程序創建屬性)文件中TargetImages表中%BASEDIR%.msi和一排UpgradedImages%UPDIR%
  5. 指向一行到.msi調用msimsp.exe <pcp-file> -p <absolute-path-to-desired-patch-file>

瞧,你完成了。

現在是否值得它取決於你。

這是我在MSI數據庫上運行SQL查詢的一些腳本的幫助下進行查詢或根據需要更新它們的方法。這工作得非常好,已被放入GNU make文件中,以構建一大堆MSI,派生MSI,補丁和虛擬補丁(用於測試)。

這裏的訣竅是修補解壓縮的管理映像,並指導msimsp.exe在未更改的版本和解壓縮的管理映像的更改版本之間創建補丁。總之,這一切都符合你「手工操作」的要求。

發表評論以防萬一需要澄清。