共用方式為


判斷何時使用 Windows Installer 與 XCOPY

 

Martin Wasznicky
Microsoft Corporation

2002 年 1 月

總結: 檢查並比較部署 Microsoft .NET 應用程式的兩種方法:DOS XCOPY 命令和 Microsoft Windows Installer 技術。 (8 個列印的頁面)

目標

  • 瞭解何時及如何使用 XCOPY 部署 Microsoft® .NET 解決方案
  • 瞭解何時使用 Microsoft® Windows® Installer 部署 .NET 解決方案

假設

下列內容應為 true,讓您充分利用本檔:

  • 您是一位有經驗的 Microsoft® Visual Basic® 程式設計人員
  • 您已使用 Microsoft® Visual Studio® Installer 或 Microsoft Windows Installer 2.0 部署應用程式
  • 您已使用 XCOPY DOS 命令
  • 您可以存取 .NET 和 Microsoft® Internet Information Server (IIS)

目錄

簡介
使用 XCOPY
Windows Installer
Visual Studio .NET 的新功能?
總結

簡介

Microsoft .NET Framework提供數項新功能,讓應用程式部署如同 XCOPY 作業一樣簡單。 許多開發人員都熟悉部署傳統 COM 應用程式的問題;註冊類別和類型程式庫、維護二進位相容性,以及缺少並存元件部署 (這其中一切有時稱為「DLL HELL」) 。 Regedt32.exe已成為開發人員元件部署中熟悉的工具,因為 COM 具有登錄的相依性。

隨著元件和版本設定的導入.NET Framework,最後會剪下登錄的 umbilical cord。 由於元件是自我描述 (它們包含中繼資料描述,除此之外,類型、資源和參考的元件) ,因此會移除其對登錄的相依性,讓 XCOPY 部署的承諾成為實境。

不過,吸引人的 XCOPY 部署音效,就像任何技術一樣,其限制也一樣。 根據特定部署案例的複雜度和自動化需求,XCOPY 可能無法滿足應用程式的部署需求。 在這些情況下,.NET Framework與 Microsoft Windows Installer 2.0 技術整合,以提供開發人員的替代設定、散發和部署選項。 此外,Visual Studio .NET 提供以 Windows Installer 2.0 技術為基礎的安裝和部署專案。 這可讓開發人員輕鬆地為建置在.NET Framework上更複雜的應用程式建立設定和部署套件。

本檔涵蓋兩個主要主題:

  • 使用 XCOPY: DOS XCOPY 命令的概觀,用來作為部署 .NET 應用程式的檢測。 將會討論 XCOPY 使用和限制,包括保存安全性 ACL 資訊、檔案和資料夾屬性、資料夾系統產生,以及共用違規。
  • Windows Installer: Windows Installer 技術的概觀,並檢查其功能,如 .NET 公開。 也會檢查何時使用 Windows Installer 技術與 XCOPY 的適當性。

使用 XCOPY

部署應用程式通常包含將最終應用程式或元件散發至執行應用程式的電腦。 由於 .NET 元件的自我描述本質,因此 的部署和複寫。使用 XCOPY 的 NET 建置應用程式已變成實境,因為在許多情況下,不再需要修改登錄或執行其他輔助工作,例如停止 Microsoft® Windows® NT 服務。 元件的簡單性讓 XCOPY 成為在特定部署案例中使用的適當工具。

某些非常容易用於 XCOPY 部署和複寫的應用程式是 XML Web 服務和 ASP.NET Web 應用程式。 先前,這些類型的應用程式是使用 Internet Information Services (IIS) 和傳統 COM 元件所建置。 安裝這些應用程式的元件通常需要使用 Regsvr32.exe 公用程式在部署程式期間註冊元件。 更新現有的元件更為麻煩,因為 IIS 會將獨佔檔案鎖定放在元件上。 釋放鎖定的唯一方式是關閉 IIS。 取代現有的元件通常包含下列步驟:

  1. 停止 IIS 服務。
  2. 使用 Regsvr32.exe 公用程式取消註冊舊元件。
  3. 複製新的元件。
  4. 使用 Regsvr32.exe 公用程式註冊新的元件。
  5. 啟動 IIS 服務。

XML Web 服務和 ASP.NET Web 應用程式不再需要這些步驟。 IIS 不會在 .NET 元件上放置獨佔檔案鎖定,而且因為元件是自我描述的,所以不需要註冊它們。 這讓 ASP.NET Web 型應用程式非常適合 XCOPY 部署和管理。

例如,讓我們逐步解說將 XML Web 服務部署至位於相同 Windows NT 網域的遠端電腦。 基於此範例的目的,Web 應用程式目前所在的用戶端電腦名稱為 CLIENT1,而將部署 Web 應用程式的遠端電腦則命名為 SERVER1。

以下是要部署之 Web 應用程式的目錄結構。

圖 1. CLIENT1 上的 Internet Information Service MMC 顯示 DemoWebSrv ASP.NET Web 應用程式的虛擬目錄,以部署至 SERVER1

在 /bin 子目錄中,有一個名為 DemoWebSrv.DLL 的元件。 CLIENT1 上目錄結構的實體位置為 C:\INETPUB\WWWROOT\DEMOWEBSRV。 CLIENT1 上的 C:\INETPUB\WWWROOT 路徑會對應至 WWWROOT 的網路共用名稱

讓我們遵循下列步驟來開始部署案例:

  1. 在名為 WWWROOT 的 SERVER1 上建立網路共用,並將其對應至位於 InetPub 目錄下的 wwwroot 子目錄。 這是 IIS 預設網站的預設位置。 這個位置將做為 XCOPY 命令的目的地引數。

  2. 使用 XCOPY,將位於 CLIENT1 上的 DemoWebSrv 網站應用程式目錄的資料夾結構和檔案複製到 SERVER1。 在 DOS 提示字元中,輸入下列命令, (XCOPY 命令的第一個引數是要從中複製的來原始目錄;第二個引數是要複製到) 的目的地目錄:

    XCOPY \\CLIENT1\wwwroot\demowebsrv 
    \\SERVER1\wwwroot\demowebsrv /E /K /R /O /H /I
    
  3. 在 SERVER1 的預設網站底下建立名為 DemoWebSrv 的虛擬目錄,並將其標示為應用程式。 將它對應至新建立的 C:\INETPUB\WWWROOT\DEMOWEBSRV 目錄。

接下來,您會找到 XCOPY 命令結尾所使用的參數說明。 若要檢視更完整的清單,請在 DOS 命令提示字元中輸入 XCOPY /?

  • / E 會複製來源引數的目錄、子目錄和檔案,包括空的目錄。
  • / K 會複製所有現有的檔案和資料夾屬性。
  • 當您使用 XCOPY 來複製檔案或目錄樹狀結構時,根據預設,XCOPY 會移除檔案屬性。 也就是說,如果檔案已設定唯讀屬性,一旦複製該屬性,該屬性就會遺失。 若要保留 (套用) 複製的檔案的原始屬性,請使用 / K 參數。
  • / R 會覆寫標示為唯讀的檔案。
  • / O 會保留檔案和資料夾的所有安全性相關許可權 ACL。
  • / H 會同時複製隱藏和系統檔案。
  • / 我 告訴 XCOPY 假設目的地是目錄,並在不存在時建立它。 因為目的地引數 < \\SERVER1\wwwroot\demowebsrv > 是不存在的目錄,所以 XCOPY 會建立它。

就是這麼簡單。 XCOPY 已成功將 XML Web 服務部署至 SERVER1。 XCOPY 非常適合用於這類簡單部署,以及即時更新。 XCOPY 也適用于在用戶端上部署傳統型應用程式。

就像任何技術一樣,您應該使用 XCOPY 來部署 的方式和時機有限制。NET 建置的應用程式。 一般而言,XCOPY 僅適用于簡單且手動執行的部署案例。 以下列出一些 XCOPY 無法足夠的情況;這些需要更強固的部署方法。

  • 自動部署 .NET 應用程式的 COM 元件,以便與 互通。 仍然需要註冊。
  • 將元件預先編譯為遠端電腦上的機器碼。
  • 將元件安裝到遠端電腦的全域組件快取中。
  • 更新獨佔鎖定的檔案。 例如,用來裝載 .NET 遠端解決方案的 Windows NT 服務。
  • 安裝。NET 建置的 Windows NT 服務。
  • 自動設定和建立 IIS 目錄設定、NTFS 安全性設定、網路共用,以及 Active Directory 使用者和群組帳戶。
  • 自動建立桌面快捷方式、新增至新增/移除程式、建立開始功能表項目等等。

雖然 XCOPY 適用于簡單的解決方案,但在許多情況下,需要更強固的部署解決方案。 這類選項是由 Visual Studio .NET Installer 所提供,其建置在 Windows Installer 2.0 技術之上。 我們會接著進行探討。

Windows Installer

應用程式設定需求通常更為複雜,因此可由簡單的 XCOPY 部署策略處理。 在許多情況下,最終部署解決方案的目標是缺少手動設定應用程式所需技能的終端使用者。 在其他情況下,可能有許多設定需求 (例如建立使用者和群組、設定安全性、建立目錄結構等) 自動化安裝程式是必要的,以確保最終應用程式安裝行為的正確性和一致性。 不論是哪一種情況,XCOPY 部署通常都不足以符合這類需求。

如需更健全的應用程式和部署需求,Visual Studio .NET 可用來建置安裝和部署套件。 Visual Studio .NET 部署是以 Windows Installer 技術為基礎所建置。 Windows Installer 是一種軟體安裝和設定服務,隨附于 Microsoft® Windows® 2000 和 Windows XP 作業系統,並免費散發至所有 Win9x 和 NT4 平臺。 Windows Installer 服務會維護其安裝之每個應用程式的相關資訊記錄。 Windows Installer 執行時間 (MSI) 在執行部署套件期間檢查這些記錄。 卸載應用程式時,系統會檢查記錄,以確保其他應用程式在移除之前,不會依賴其元件。 Windows Installer 2.0 已擴充以提供下列功能來支援 .NET 元件:

  • 在全域組件快取中安裝、修復或移除元件。
  • 安裝、修復或移除使用者定義位置中的元件。
  • 復原未成功的安裝、修復或移除元件。
  • 全域組件快取中的元件隨選安裝。
  • 在使用者定義的位置安裝元件隨選安裝。

除了這些功能之外,Visual Studio .NET 部署專案還允許其他安裝程式的所有功能,例如讀取和寫入登錄機碼、目錄建立、註冊元件、在安裝期間收集使用者輸入的資料等等。 其他包含的功能包括:

  • 設定啟動條件的能力,例如檢查目前的使用者名稱、電腦名稱稱、實體環境、目前的作業系統、.NET CLR 是否存在等等。
  • 在實際安裝完成之後,能夠執行自訂程式或腳本。 安裝所收集的資料可以傳遞至程式,而且如果程式產生錯誤,則可以回復整個安裝。 程式可以位於.dll、.exe、腳本或元件中。

為了說明 Visual Studio .NET 部署,讓我們逐步解說部署先前使用 XCOPY 部署的 XML Web 服務。

  1. 若要開始,請使用 Visual Studio .NET 開啟名為 DemoWebSrv 的現有 XML Web 服務專案。

  2. 在 [檔案]功能表上,按一下 [新增專案],然後按一下 [新增專案]。 這應該會顯示 [新增專案] 對話方塊, (請參閱圖 2) 。

    圖 2. 顯示可用部署範本的 Visual Studio .NET 新增專案對話方塊

  3. 在 [專案類型] 底下,按一下 [ 安裝和部署專案 ] 資料夾,然後按兩下 [Web 安裝程式專案 ] 範本。 Web 安裝程式專案 (WebSetup1) 會新增至現有的方案,而 [檔案系統編輯器] 隨即開啟。

  4. [檔案系統編輯器]中,按一下 [Web 應用程式 ] 資料夾。

  5. 在 [ 動作] 功能表上,指向 [ 新增],然後按一下 [ 專案輸出]。

  6. 在 [新增專案輸出群組] 方塊中, (圖 3) ,從[專案] 清單中選取DemoWebSrv

    圖 3. [新增專案輸出群組] 對話方塊可用來將特定檔案從某個專案新增至另一個專案

  7. 從清單中選取 [主要輸出 ] 和 [ 內容檔案 ] 群組,然後按一下 [ 確定]。 這會將內容檔和已編譯的元件及其相依性新增至編譯的 Windows Installer 程式 (.msi 檔案) 。

  8. [檔案系統編輯器]中,按一下 [Web 應用程式 ] 資料夾。 在 [ 屬性 ] 視窗中,將 VirtualDirectory 屬性設定為 DemoWebSrv。 將 DefaultDocument 屬性設定為 Customers.asmx。 Windows Installer 會使用資訊,在目標伺服器的預設網站下建立虛擬目錄,並設定其預設文件屬性。

  9. 在 [ 建置] 功能表上,按一下 [建置 WebSetup1]。 這會建立WebSetup1.msi Windows Installer 安裝程式檔案。

  10. 將WebSetup1.msi檔案複製到目標 Web 服務器電腦,然後按兩下檔案以執行安裝程式。 若要存取剛部署的 Web 服務,請啟動 Internet Explorer 並輸入 URL < HTTP:// < ComputerName > /DemoWebSrv > 。

Visual Studio .NET 的新功能?

  • .NET 元件的本質讓 XCOPY 成為可行的部署選項。
  • Windows Installer 技術已擴充,可處理.NET Framework的部署需求。
  • Visual Studio .NET 部署工具是以 Windows Installer 技術為基礎所建置。
  • Visual Studio 安裝程式內建于 Visual Studio .NET 中。 安裝程式範本會新增為新專案,並提供更大的組態選項。

總結

的自我描述本質。NET 建置的元件可讓您使用 XCOPY 來部署和更新簡單的應用程式。 XCOPY 可以輕鬆地處理需要手動安裝的部署案例,但有幾個相依性和組態選項。 XML Web 服務和 ASP.NET Web 應用程式特別適合這種類型的部署,特別是在應用程式的開發階段。

Visual Studio .NET 也會根據 Windows Installer 提供其他部署工具,以允許更有彈性且健全的設定和自動化需求。 使用 Visual Studio .NET 建立 Windows Installer 程式可讓開發人員為最需要的應用程式建立複雜的安裝程式。

要使用的部署選項最終取決於應用程式組態需求的範圍和深度。

關於作者

Marty Wasznicky 是 Microsoft Corporation 資深系統工程師,著重于企業應用程式整合、商務對商務和電子商務。 他擁有在 IT 產業中建構和實作解決方案的十年以上經驗,同時具備公司與諮詢容量。 他是 Microsoft 認證解決方案開發人員、Microsoft 認證系統工程師、Microsoft 認證資料庫管理員,以及 Certified Novell 工程師。 他已在 Visual Basic 程式設計人員日誌Access/VB/SQL Advisor 雜誌中撰寫許多文章,目前正在 Microsoft 的南加州區工作。

關於 Informant Communications 群組

Informant Communications Group, Inc. (www.informant.com) 是一家著重于資訊技術部門的豐富媒體公司。 在軟體發展發行集、會議、目錄發佈和網站中,ICG 是在 1990 年建立的。 透過美國和英國的辦公室,ICG 已作為受尊重的媒體和行銷內容整合者,滿足 IT 專業人員對於品質技術資訊的支援。

Copyright © 2002 Informant Communications Group and Microsoft Corporation

技術編輯:PDSA、Inc. 和 KNG 諮詢