修改msi檔案

2022-09-18 11:57:14 字數 2036 閱讀 3889

msi檔案是乙個安裝包檔案,可以看做乙個資料庫,其中包含很多資源,例如,配置檔案,可執行檔案exe等等。

我想要把修改過 exe可執行檔案提交到msi檔案中,那麼就需要知道msi檔案的構成,首先 msi檔案 中最重要的內容就是cab檔案,cab檔案可能是在 msi檔案 的內部,也可能是獨立於 msi檔案 之外的。如果cab檔案是在msi檔案內部的話, 那麼提取和提交 cab檔案 就需要用到msidb這個軟體了。

提取cab檔案

解壓cab檔案

將修改的資源放回解壓cab解壓後目錄

將目錄重新打包成cab檔案

將新的cab檔案提交進msi檔案

如果cab檔案是獨立在msi檔案之外的,那麼就可以省略 1,5步驟。

首先要知道msi包含cab檔案的名字,才可以提取出來。可以使用msidb命令提取倆個檔案。

1.1 提取media.idt和file.idt檔案

msidb -e -d msi檔案名字

選中filemedia這倆個檔案,然後選中匯出,點選確定,此時在目錄中會出現這倆個檔案(字尾名為.idt)。

這倆個檔案都可以用記事本開啟:

cpx-fmt.cab就是cab的檔名,前面的#是無用的。

1.2 提取cab檔案

msidb -x cab檔名 -d msi檔名
一般的解壓軟體都可以直接解壓cab檔案。將其解壓到乙個目錄裡面就可以了。

我要替換的是我修改的乙個exe, 圖中的 cpxfmtexe 就是可執行檔案exe,只不過這裡沒有字尾名。

將修改好的檔案命名同樣的名字並替換到該目錄裡面。

這一步是最為複雜的。主要在於壓縮的順序問題。檔案的順序在我們之前的file.idt檔案中,可以用excel檔案開啟檢視:

將這個軟體放入到,file.idt 的同一目錄,這時解壓cab的目錄和file.idt 檔案和這個軟體都應該處於同一目錄。然後啟動這個軟體:

這裡我的cab解壓的目錄是cpx-fmt, 然後回車,等待打包結束:

這時會在目錄中生成乙個new.cab的檔案,這個就是打包好的檔案。由於我寫的這個軟體中已經呼叫iexpress,所有你無需執行iexpress 命令了。

new.cab重新命名為原始的檔名,我這裡是cpx-fmt.cab。然後執行命令:

清除msi檔案中的原始cab包資料:

msidb -k cab檔名 -d msi檔名
新增新打包的cab檔案:

msidb -a cab檔名 -d msi檔名
這裡 cab檔名,必須是前面獲取到的檔名,所以需要將前面生成的 new.cab 修改為原始名

到此所有步驟結束。

這裡可以檢視更加詳細的4. 將目錄重新打包成cab檔案這一步的邏輯,作者用excel處理的,很感謝作者提供的方法。

msi檔案替換修改cab檔案

一些產品打包發布時希望把cab檔案注入msi檔案或者替換msi裡的cab檔案,我前段時間做了相關的工作,與大家分享下。軟體準備 orca,msidb,cabarc.首先執行orca,開啟目標msi,然後工具 選項 資料庫 把 每次儲存乙個資料庫時生成唯一的程式包 和 另存為 時複製嵌入的流 選上。然...

NSIS安裝msi檔案

安裝包中需要安裝activeperl 5.10.0.1002 mswin32 x86 283697.msi檔案,用exec exewait exeshell直接呼叫都不行,google了一下發現baidu裡其實有講 windows r installer.v 3.01.4000.1823 msiex...

msi檔案的指令碼安裝

在我們日常的開發環境的搭建中,我們有時候需要安裝很多的msi檔案,如果能把這些msi檔案的安裝自動化,我們就不用乙個乙個的雙擊,然後一步一步地安裝。介紹一下msi檔案 說到msi檔案,不得不先說說windows installer,它不只是安裝程式,而是可擴充套件的軟體管理系統。windows in...