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檔案名字
選中file
和media
這倆個檔案,然後選中匯出,點選確定,此時在目錄中會出現這倆個檔案(字尾名為.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...