“引導程式”是一般安裝程式,可配置為引導幾乎所有打包為 Windows Installer 檔案或可執行程式的可轉散發元件。它通過一組簡單的 XML 清單進行編程,該清單指定引導程式管理組件安裝所需的所有中繼資料。引導程式不規定應用程式必須使用何種安裝程式技術(Windows Installer 或 ClickOnce)。
當使用者啟動 Setup.exe 時,它首先檢測是否已安裝所有系統必備。如果缺少某個系統必備,則引導程式會顯示一個安裝對話方塊,列出缺少的組件並顯示其許可協議。否則,如果檢測到所有的系統必備,引導程式則只需啟動應用程式的安裝程式。
使用者接受許可協議後就會開始下載和安裝過程。安裝完所有的系統必備後,引導程式將關閉應用程式自身的安裝過程。
建立自訂程式包
有些情況下,您不需要為可轉散發元件建立程式包。通常,您只需要為共用組件或系統組件產生程式包,這包括將檔案安裝到 GAC 中、執行全域註冊或組成 Windows Service。
您應詢問控制項提供者是否可以在應用程式中附帶可再發行檔案。如果簡單的複製操作即足以重新發布系統必備組件(例如,如果它沒有任何依賴項),則無需建立程式包。只需確保檔案已包含在安裝程式中,或設定為“複製本地”(“屬性視圖”中檔案的 Copy 屬性應設定為 True)。
您還應確定是否必須使用安裝程式。如果是,請使用引導程式程式包。
若要建立新的組件程式包,您需要提供:
您必須手動建立資訊清單檔,資訊清單檔包含的中繼資料必須遵循 .NET Framework SDK 中的“程式包架構元素”描述的特定架構。有關架構參考的資訊,請參見產品和包架構引用。Visual Studio 整合的安裝程式產生器會在產生時驗證資訊清單檔。
可使用 DependsOnProduct 架構元素在這些清單中指定程式包之間的依賴關係。依賴關係的一個樣本是,安裝 Visual J# 運行庫需要首先安裝 .NET Framework。
然後您必須將產品和封裝資訊清單檔案(以及可再發行檔案)複製到 Visual Studio 為可轉散發元件程式包保留的特定檔案夾中:
複製代碼
\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bootstrapper
若要編寫將可轉散發元件及其清單複製到此檔案夾的安裝程式,可以以編程方式從下列登錄機碼擷取 Bootstrapper 檔案夾的位置(按照下面的順序讀取登錄機碼):
複製代碼
HKCU\Software\Microsoft\GenericBootstrapper\1.0\PathHKLM\Software\Microsoft\GenericBootstrapper\1.0\Path
如果這兩個項都不存在,則讀取登錄機碼擷取 SDK 的安裝位置:
複製代碼
HKLM\Software\Microsoft\.NET Framework\sdkInstallRootv2.0
每個可轉散發元件均位於程式包目錄下它們自己的子檔案夾中。然後將產品清單和可再發行檔案放入此子檔案夾中。組件的語言版本以及封裝資訊清單放置在根據“地區性名稱”(請參見 CultureInfo 中的表)命名的子檔案夾中。
這些檔案一旦複製到 Bootstrapper 檔案夾中,它們將自動出現在 Visual Studio 的“系統必備”對話方塊中,以便開發人員通過選中複選框對它們進行選擇。
有關使用引導程式配置安裝的更多資訊,請參見位於 http://msdn.microsoft.com/msdnmag/issues/04/10/Bootstrapper/ 上的 MSDN 文章“Use the Visual Studio 2005 Bootstrapper to Kick-Start Your Installation”(使用 Visual Studio 2005 引導程式開始安裝)。
使引導程式程式包可轉散發元件與應用程式安裝保持分離
一般規則是,應使引導程式程式包可轉散發元件中的所有組件與使用這些組件的應用程式保持分離。例如,假設您有一個包含組件 Acme.DataWidgets.dll 的名為 Acme.DataWidgets.msi 的引導程式程式包。Acme.DataWidgets.dll 在開發時不應出現在項目的 bindir 目錄中,並且不應部署到應用程式的安裝程式程式包中。
因此,建議您將引導程式組件安裝到開發電腦上的 GAC 中,並且最好使用同一核心引導程式程式包可轉散發元件安裝程式。這可防止在開發時將引導程式組件複製到項目的 bindir 目錄中。另外,建議您定義一個 RedistList 檔案來介紹引導程式可轉散發元件程式包中包含的所有程式集。這可防止在任何應用程式部署項目中包含引導程式組件。RedistList 檔案只需安裝在開發人員的電腦上。
若要達到這一目的,請在 .NET Framework 目錄 (\WINDOWS\Microsoft.NET\Framework) 的 RedistList 檔案夾中建立一個可轉散發元件列表。
可轉散發元件列表是一個應使用下面的格式命名的 XML 檔案:company_name + component_name + RedistList.xml。這樣,如果組件名為“Datawidgets”,製作者為“Acme”,則命名為 Acme.DataWidgets.RedistList.xml。可轉散發元件列表的內容的樣本可能類似如下所示:
複製代碼
<?xml version="1.0" encoding="UTF-8"?><FileList Redist="Acme.DataWidgets" ><File AssemblyName="Acme.DataGrid" Version="1.0.0.0" PublicKeyToken="b03f5f7f11d50a3a" Culture="neutral" ProcessorArchitecture="MSIL" InGAC="true" /></FileList>
向“系統必備”對話方塊添加程式包
“系統必備”對話方塊使您可選擇應用程式在安裝前所需的組件。Visual Studio 包含許多標準的系統必備。但是,您可以添加其他 Microsoft 組件或第三方組件作為系統必備。為此,您必須按上文所述創作產品和封裝資訊清單。
在“系統必備”對話方塊中,“請選擇要安裝的系統必備組件”列表顯示可安裝的系統必備程式包。此列表中程式包的順序取決於清單中指定的依賴關係,並指定程式包的安裝順序。
向引導程式中添加一般程式包後,它會作為“MyPackage”出現在“系統必備”對話方塊中。Visual Studio 不會自動選擇要安裝的程式包。
對於 ClickOnce 項目,Visual Studio 建議通過在“請選擇要安裝的系統必備組件”中預設選中“.NET Framework”複選框為所有項目類型提供 .NET Framework。它還建議為 J# 項目提供 J# 運行庫。
對於 Windows Installer 項目,如果當前項目為 Setup 項目或 Websetup 項目,則預設情況下會選中“.NET Framework”複選框。如果在產生時既沒有選擇 .NET Framework,也沒有選擇 Windows Installer 程式包,則會發出產生警告。