﻿# 介紹 Windows Installer 好用的合併模組 (Merge Modules)

最近我不斷的在跟 Windows Installer 奮戰，由於我們公司開發的產品需要外掛一個硬體驅動程式，而我希望我們的產品在安裝時可以連同該驅動程式也一併自動安裝進去，原本我的想法很簡單，只要在自訂動作(Custom Action)中在安裝前自動執行那個驅動程式的安裝檔即可，誰知道原來那個驅動程式的安裝檔也是用 Windows Installer 建置的，就因為 Windows Installer 不允許有兩個 Windows Installer 安裝程式同時執行，所以這個方法根本行不通。

但後來我發現有 "**合併模組(Merge Modules)**" 這個玩意，且設計驅動程式的原廠也有提供合併模組的安裝檔 ( \*.msm )，我只要在我的安裝專案(Setup Project)直接加入這個合併模組就完成了兩個安裝檔的合併動作，剩下的細節就交給 Windows Installer 去安裝了。

例如說我有個 Windows 安裝程式 (.msi)，我希望在安裝這個程式之前有一些共用的元件需要先被安裝，而這些元件在安裝時可能其他的安裝程式也會被用到，這時你就可以將這些共用的元件先包裝成 "**合併模組(Merge Modules)**" 然後再到各自的 Windows 安裝程式 (.msi) 中加入這個合併模組即可。

基本上自行打包 Merge Module 跟原本的 Setup Project 沒多大差別，最大的差別在於輸出檔案的副檔名會是 \*.msm 而已。

![New Project -> Setup and Deployment -> Merge Module Project](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/681031f896123a9f539e-image_3.png "New Project -> Setup and Deployment -> Merge Module Project")

而在你原本的 Setup Project 中只要新增 Merge Module 並選取 \*.msm 檔案即可設定完成，等該專案在安裝時，所有的 Merge Module 都會先安裝好，然後再安裝你原本的專案。

![Setup Project -> Add -> Merge Module](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/21bfe1d99dd3e425b9a3-image_6.png "Setup Project -> Add -> Merge Module")

選取廠商或提供的合併模組 (Merge Module)

![選取廠商提供的合併模組 (Merge Module)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1cc63747f112223ddbb0-image_9.png "選取廠商提供的合併模組 (Merge Module)")

Merge Module 新增進來後就完成了，其他什麼事都不用做

![Merge Module 新增進來後就完成了，其他什麼事都不用做](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/9c67e3d87e8dcd97ae94-image_12.png "Merge Module 新增進來後就完成了，其他什麼事都不用做")

有些廠商提供的 Merge Module 可能還會包括相依性 (Dependencies) 所以在加入時最好先參照廠商提供的說明文件，不然你也可以透過屬性查出某些 Merge Module 是否相依於其他的 Merge Module，以免安裝失敗。

![Merge Module -> ModuleDependencies](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e56631fb3be9bc1894a8-image_15.png "Merge Module -> ModuleDependencies")

**相關連結**

-   [逐步解說：使用合併模組安裝共用元件](http://msdn.microsoft.com/zh-tw/library/aw2dz878.aspx)
-   [Windows Installer 部署](http://msdn.microsoft.com/zh-tw/library/2kt85ked.aspx)
-   [Windows Installer 部署概念](http://msdn.microsoft.com/zh-tw/library/k2he6h0w.aspx)
-   [合併模組簡介](http://msdn.microsoft.com/zh-tw/library/6771e4ch.aspx)
-   [安裝程式與合併模組的建議事項](http://msdn.microsoft.com/zh-tw/library/y0w2est5.aspx)
-   [Merge Module - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Merge_Module)
-   [Windows Installer - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Windows_Installer)
