<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鷹翔宇空

    學習和生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
    原文引自:http://www.microsoft.com/china/msdn/library/architecture/architecture/architecturetopic/SCArchDeGuide/Chapter1Introduction.mspx

    第 7 章 — 部署和更新智能客戶端應用程序

    發布日期: 08/20/2004 | 更新日期: 08/20/2004
    pponline

    智能客戶端體系結構與設計指南

    David Hill, Brenton Webster, Edward A. Jezierski, Srinath Vasireddy and Mohammad Al-Sabt, Microsoft Corporation; Blaine Wastell, Ascentium Corporation; Jonathan Rasmusson and Paul Gale, ThoughtWorks; and Paul Slater, Wadeware LLC

    相關鏈接

    Microsoft? patterns & practices 庫 (http://www.microsoft.com/resources/practices/default.mspx)

    .NET 的應用程序體系結構:設計應用程序和服務 (http://msdn.microsoft.com/library/en-us/dnbda/html/distapp.asp)

    摘要:本章介紹如何在智能客戶端和 Windows 平臺中最好地使用 .NET Framework 提供的部署功能,并且提供有關如何取舍可用的部署和更新機制的指導。

    *
    本頁內容
    部署 .NET Framework 部署 .NET Framework
    預先安裝 .NET Framework 預先安裝 .NET Framework
    部署智能客戶端應用程序 部署智能客戶端應用程序
    部署智能客戶端應用程序 部署智能客戶端應用程序
    選擇正確的更新方法 選擇正確的更新方法

    智能客戶端應用程序在客戶端計算機上執行本地處理,因此需要將它們部署到這些計算機上。過去,在客戶端計算機上長期部署、更新、維護和卸載應用程序非常困難而且存在很多問題。由于 COM 的緣故,幾個問題使得向客戶端計算機部署應用程序變得非常困難,包括:

    ?

    與注冊表緊密耦合的應用程序。安裝 COM 應用程序要求在注冊表中注冊類和類型庫。

    ?

    非獨立的應用程序。除了必須在注冊表中注冊類和類型以外,應用程序通常還包括位于硬盤上的共享文件以及注冊表中包含的配置設置。應用程序不是獨立的;相反,它的構成部分分布在計算機中的不同區域。

    ?

    無法并列部署的組件。無法將同一 DLL 的兩個不同版本部署到同一目錄中。

    這些問題構成了有效部署和維護客戶端應用程序的巨大障礙。

    Microsoft ? .NET Framework 具有一些能夠簡化部署 .NET Framework 應用程序的過程的功能。這些功能包括:

    ?

    自我描述的程序集。.NET Framework 程序集包含元數據,以描述引用的所有程序集的版本信息、類型、資源和詳細信息(以及其他內容)。這意味著它們不依賴于注冊表。

    ?

    版本控制和并列支持。.NET Framework 對于版本控制具有大量的支持,允許您安裝多個版本的應用程序和多個版本的 .NET Framework,以便它們能夠并列運行。

    ?

    相互隔離的應用程序。可以將 .NET Framework 程序集部署到應用程序目錄,以供該特定應用程序使用,并且默認情況下將其與其他應用程序單獨保存并隔離。這意味著不需要將程序集部署到 Windows 目錄或者將其顯式注冊到注冊表中,從而降低了在安裝其他應用程序時改寫或刪除這些程序集的可能性。

    ?

    全局程序集緩存。如果您希望在同一臺計算機上的不同應用程序之間共享代碼,則可以將組件部署到全局程序集緩存。全局程序集緩存允許同一程序集的不同版本共存。在引用全局程序集緩存中的程序集時,必須指定程序集的完全限定名,包括公鑰標記和版本號。這有助于防止無意中使用組件的不同版本。

    ?

    針對具有強名稱的程序集的編譯時程序集的默認運行時綁定。默認情況下,如果程序集具有強名稱,則 .NET Framework 會將其綁定到其從屬程序集的確切版本。這會降低應用程序脆弱性,因為 .NET Framework 加載的是構建和測試該應用程序時的確切的程序集版本。如果需要,可以顯式覆蓋該行為。

    總而言之,上述更改有助于解決許多過去曾經困擾胖客戶端應用程序的部署和維護的基礎問題。有關 .NET Framework 如何簡化部署的詳細信息,請參閱“Simplifying Deployment and Solving DLL Hell with the .NET Framework”,網址為:http://msdn.microsoft.com/library/en-us/dndotnet/html/dplywithnet.asp

    本章介紹用于部署 .NET Framework 本身的選擇,然后分析如何部署基于 .NET Framework 的智能客戶端應用程序。有許多用于部署應用程序的選擇,本章討論了每個選擇,并隨后討論了如何選擇最適合您的環境的方法。最后,本章比較詳細地分析了用于部署應用程序更新的選擇。

    部署 .NET Framework

    .NET 智能客戶端應用程序依靠 .NET Framework 工作,因此要求在客戶端計算機上部署 .NET Framework。.NET Framework 是使用 .NET Framework Redistributable Package 部署的,后者可從 Microsoft MSDN? 或 Windows Update Web 站點獲得。

    您還可以從產品 CD 或 DVD 獲得該 Redistributable Package。該軟件包在 .NET Framework SDK 和 Microsoft Visual Studio? .NET 2003 DVD 上提供。

    .NET Framework Redistributable Package 實際上是一個 Windows 安裝程序軟件包,它被包裝到一個名為 Dotnetfx.exe 的自解壓縮可執行文件中。Dotnetfx.exe 可執行文件啟動 Install.exe,后者執行平臺檢查,根據需要安裝 Windows 安裝程序 2.0 版,然后啟動 Windows 安裝程序軟件包(.msi 文件)。

    有關使用 Dotnetfx.exe 的詳細信息,請參閱“.NET Framework Redistributable Package 1.1 Technical Reference”,網址為:http://msdn.microsoft.com/library/en-us/dnnetdep/html/dotnetfxref1_1.asp

    返回頁首返回頁首

    預先安裝 .NET Framework

    如今,許多企業都選擇將 .NET Framework 作為其標準操作環境的一部分進行部署。您可以用兩種方法在整個企業中部署 .NET Framework:

    ?

    使用將軟件到客戶端計算機的技術,如 Microsoft Active Directory? 目錄服務的“組策略”功能或 Microsoft Systems Management Server (SMS)。使用“組策略”軟件部署通過網絡安裝軟件包,您可以確保用提升的特權安裝該軟件包。同樣,使用企業“推”技術(如 SMS),您可以用必需的權限安裝 .NET Framework。要使用“組策略”或 SMS 安裝 .NET Framework,首先需要從 dotnetfx.exe 中解壓縮 Windows 安裝程序文件。有關如何完成該任務的詳細信息,請參閱“Redistributing the .NET Framework”,網址為:http://msdn.microsoft.com/library/en-us/dnnetdep/html/redistdeploy.asp

    ?

    要求最終用戶自己部署 .NET Framework,方法是使用 Windows Update,或者從網絡共享、內部 Web 站點或 Microsoft Web 站點下載 .NET Framework 。最終用戶將需要在其計算機上具有管理特權才能部署 .NET Framework,這是因為 .NET Framework Redistributable Package 安裝程序要求有管理特權才能安裝。

    隨應用程序一起安裝 .NET Framework

    如果您無法確定哪些計算機預先安裝了 .NET Framework,您可以選擇僅在需要 .NET Framework 時(換句話說,就是在安裝 .NET Framework 應用程序時)才安裝它。當您不知道您將向其進行部署的計算機的確切軟件配置(因此不知道是否預先安裝了 .NET Framework)時,該方法尤其有用。例如,如果您是獨立軟件供應商 (ISV),并且開發和打包智能客戶端應用程序以便銷售給形形色色的客戶,則您可能不知道您的客戶的計算機是否安裝了 .NET Framework。

    要確保 .NET Framework 隨您的應用程序一起安裝,可以使用 setup.exe 引導程序示例。該示例會檢查是否已經安裝了 .NET Framework,如果尚未安裝,則會在安裝應用程序之前安裝 .NET Framework。

    有關使用 setup.exe 引導程序示例的詳細信息,請參閱 Deploying .NET Framework-based Applications 的第 3 章,網址為: http://www.microsoft.com/downloads/details.aspx?FamilyId=5B7C6E2D-D03F-4B19-9025-6B87E6AE0DA6&displaylang=en

    返回頁首返回頁首

    部署智能客戶端應用程序

    當您設計智能客戶端應用程序時,應該考慮將如何部署這些應用程序。只要有可能,您都應該努力將任何安裝的系統影響降至最低限度。這樣做使您可以更緊密地跟蹤對應用程序進行的任何更改,并且減輕更新和卸載應用程序的問題。但是,有時您將需要執行更為復雜的安裝,例如,當您重用非托管代碼組件時,或者當您需要在注冊表中安全地存儲敏感數據時。

    當您部署智能客戶端應用程序時,可以使用多種選擇。這些選擇包括:

    ?

    無接觸部署。使用該方法時,您可以將文件復制到 Web 服務器,然后當用戶單擊相應的鏈接時,.NET Framework 會自動將應用程序及其從屬程序集下載到客戶端。

    ?

    帶有應用程序更新存根的無接觸部署。使用該方法時,您可以使用無接觸部署下載應用程序存根,該存根隨后會將應用程序的其余部分下載到本地硬盤。

    ?

    從文件共享運行代碼。使用該方法時,您可以將文件復制到文件共享,然后從該共享中運行應用程序。

    ?

    Xcopy。使用該方法時,您可以將文件直接復制到客戶端。.NET Framework 允許應用程序及其所有從屬程序集位于單個目錄結構中,因此您無須在客戶端上注冊任何組件。

    ?

    Windows 安裝程序軟件包。使用該方法時,您可以將應用程序的文件打包到 Windows 安裝程序軟件包中,然后將該軟件包安裝到客戶端上。

    每種方法都有其自己的優點和缺點。要幫助確定最適合您的環境的部署方法,您應該更加詳細地分析每種方法。

    無接觸部署

    無接觸部署使用戶可以通過使用指向應用程序的 URL 鏈接來訪問您的位于 Web 服務器上的應用程序。要使用無接觸部署來部署應用程序,您只需要將適當的文件復制到 Web 服務器。當用戶通過使用 URL 鏈接瀏覽到應用程序的位置時,Microsoft Internet Explorer 將下載并運行該應用程序。應用程序及其從屬程序集將被使用 HTTP 下載到客戶端,并且被存儲在名為程序集下載緩存的特殊位置。當 .NET Framework 確定是否需要下載 Web 服務器上的程序集時,將只檢查該文件上的日期-時間戳,而不會檢查程序集版本號。如果服務器上的程序集所具有的日期-時間戳不比客戶端上的晚,則不會下載這些程序集。

    如果您使用無接觸部署來部署您的智能客戶端應用程序,則需要向用戶提供指向 Web 服務器上的應用程序位置的 URL。使用該方法時,客戶端計算機上不需要任何安裝程序 — 所有代碼都將根據需要下載。每當 Web 服務器上發生更改時,都會自動更新您的應用程序。如果文件已經更改,則會根據需要下載較新的版本,就像使用普通的 Web 瀏覽一樣。

    無接觸部署依靠 .NET Framework 的能力與 Internet Explorer 5.01 或更高版本交互,以檢查是否有所請求的 .NET 程序集。在請求期間,會將可執行文件下載到下載緩存中。然后,一個名為 IEExec 的進程將在 .NET Framework 的代碼訪問安全基礎結構提供的安全隔離環境中啟動應用程序。

    客戶端只有在同時安裝了 .NET Framework 以及 Internet Explorer 版本 5.01 或更高版本時,才會嘗試運行該應用程序。

    如果您決定利用無接觸部署來部署使用應用程序配置文件的應用程序,則可能需要配置 Web 服務器目錄以便允許下載該應用程序的配置文件,因為默認情況下未啟用該功能。請確保僅啟用從您的應用程序所在的目錄下載配置文件的功能;否則,您可能啟用下載專用配置文件的功能并且引入安全風險。

    在使用無接觸部署時,實際上會下載配置文件兩次:第一次是在檢查有無綁定信息時(例如,為了控制應用程序使用的組件的確切版本),第二次是在查找用戶特定的配置信息時。

    您可以從已經部署的應用程序內使用無接觸部署,通過 Assembly.LoadFrom() 方法下載并運行代碼。該技術可用于下載頻繁更改的代碼(如頻繁更改的業務規則),或者提供其他某種功能的按需安裝。

    您可以通過無接觸部署運行應用程序的本地化版本。客戶端計算機的當前區域性用于自動下載所需的適當資源程序集,以便提供應用程序的本地化版本。

    您可以使用 Web 服務器提供的安全性機制來確保無接觸部署應用程序的安全。例如,要將對應用程序的訪問權限制到 Intranet 上的授權用戶,您可以在 Web 服務器中的應用程序目錄上啟用 Windows 集成安全性。要允許所有用戶訪問該應用程序,您可以啟用對應用程序的目錄的匿名訪問。

    如果您的 Web 服務器不允許匿名訪問或者使用 Windows 集成安全性對客戶端進行身份驗證,則您的應用程序可能無法下載配置文件。

    無接觸部署的局限性

    對于部署簡單的應用程序或者部署更為復雜的應用程序的組成部分而言,無接觸部署可能很有用。但是,對于更為復雜的智能客戶端應用程序的完整安裝而言,它并不是適當的部署方法,原因有以下幾點:

    ?

    受限制的默認安全設置

    ?

    不可靠的脫機功能

    ?

    沒有事務性安裝

    .NET Framework 版本 2.0 中的 ClickOnce 技術將無需在安裝和運行應用程序之前手動對客戶端進行安全策略更改。ClickOnce 將提供一種可配置的機制,以便在從 Web 服務器首次安裝應用程序時,自動進行安全策略更改。ClickOnce 還將向智能客戶端應用程序提供可靠的脫機功能,并且將使它們可以與 Windows 外殼程序完全集成。

    ?

    本節詳細分析無接觸部署的限制。

    受限制的默認安全設置

    代碼訪問安全根據應用程序提供的證據向應用程序授權。默認情況下,使用應用程序的位置(用于啟動它的 URL)來確定授予它的權限。除非更改了客戶端計算機上的本地安全策略,否則只在某種程度上信任無接觸部署應用程序,這意味著只會將有限數量的權限授予它們。

    默認情況下,使用無接觸部署進行部署的智能客戶端應用程序將無法執行下列操作:

    ?

    向硬盤寫(獨立存儲除外)

    ?

    將程序集部署到全局程序集緩存

    ?

    部署或使用非托管代碼

    ?

    部署要求注冊或者進行其他注冊表更改的組件

    ?

    與 Windows 外殼程序(具體說來,就是 Start 菜單上的安裝圖標以及 Control Panel 中的 Add or Remove Programs 項目)集成

    ?

    訪問數據庫

    ?

    與任何其他客戶端應用程序(如 Microsoft Office 應用程序)交互

    ?

    訪問 Web 服務或其他位于網絡上但不位于部署應用程序的同一服務器上的資源

    ?

    執行在與部署位置相關聯的區域中定義的安全操作以外的其他安全操作

    如果您的應用程序要求比默認權限集更多的權限,并且您希望使用無接觸部署,則您將必須修改客戶端上的安全策略,以便授予應用程序正常工作所需的權限。在部署您的應用程序之前,需要將此類安全策略更改傳播到客戶端計算機(例如,使用“組策略”、Windows 安裝程序軟件包或批處理文件)。這些要求減少了無接觸部署方法的一些好處。有關部署安全策略的詳細信息,請參閱“.NET Framework Enterprise Security Policy Administration and Deployment”,網址為:http://msdn.microsoft.com/library/en-us/dnnetsec/html/entsecpoladmin.asp

    當您設計應用程序時,應該確定您是否能夠滿足您的智能客戶端應用程序的設計規范,并且遵守無接觸部署應用程序的不完全信任要求。通常,無接觸部署以及從文件共享運行代碼提供了易于部署的解決方案,但是可能在某種程度上限制應用程序的功能,以至于它們對于許多智能客戶端應用程序而言并不實用。不過,如果您的應用程序不要求任何附加權限,則無接觸部署可能是應用程序的理想部署機制。

    有關完全受信任的應用程序和不完全受信任的應用程序的詳細信息,請參閱第 5 章:安全性考慮事項

    不可靠的脫機功能

    使用無接觸部署來部署智能客戶端應用程序的另一個問題是它們不能可靠地脫機工作。這一問題是由許多因素造成的:

    ?

    程序集的延遲下載。程序集被按需下載并存儲在程序集下載緩存(它被作為 Internet Explorer 緩存的一部分進行管理)中。在某些情況下,當您聯機運行應用程序時,您可能沒有下載該應用程序的所有部分,這將影響應用程序在脫機時完全發揮作用的能力。

    ?

    程序集可能被刪除。因為程序集駐留在由 Internet Explorer 緩存管理的區域中,所以如果該緩存由于某種原因而被清除,則您的應用程序文件將被刪除。

    ?

    應用程序依賴于 Internet Explorer 脫機設置。在嘗試脫機運行應用程序時,您必須將 Internet Explorer 設置為在脫機模式下運行,即使您的應用程序不是在 Internet Explorer 內部運行。而且,如果您確實具有連接,但 Internet Explorer 被無意中設置為脫機模式,則不會對服務器進行更新檢查。

    沒有事務性安裝

    在使用無接觸部署時,根據需要將程序集下載到隨時可能被清除的緩存中。因此,無法在任何時候都確保本地硬盤上裝有所有必要的代碼。對于許多組織而言,這種不確定性可能是業務線應用程序所不能接受的。

    帶有應用程序更新存根的無接觸部署

    使用無接觸部署的主要問題之一是:默認情況下,應用程序從程序集下載緩存中運行,并且只受到不完全信任,除非修改了本地安全策略。這可能限制智能客戶端應用程序的功能,包括它的在脫機環境下可靠工作的能力。一種避免該問題的方法是最初使用無接觸部署來部署應用程序存根,后者接著自動將該應用程序的其余部分下載并安裝到本地硬盤上。該存根將應用程序部署到硬盤上的指定位置,如“C:\Program Files”,因此不會受到 Internet Explorer 緩存的限制。當該應用程序運行時,因為它是從本地硬盤運行的,所以它將被授予完全信任權限,并且在工作時不會受到與不完全信任應用程序相關聯的限制。應用程序更新存根還可用于確保在服務器上發生更改時可靠而自動地更新該應用程序。

    如果您使用該方法部署您的應用程序,則需要確保修改客戶端計算機的 .NET Framework 安全策略,使應用程序存根本身可以用足夠的權限運行,以便將應用程序構件下載并存儲到本地硬盤上。

    設計應用程序更新存根可能非常復雜。為了幫助您,Microsoft 已經創建了 Updater Application Block,您可以將其用作設計您自己的自動更新解決方案的基礎。設計 Updater Application Block 的目的是:

    ?

    為 .NET Framework 應用程序實現基于“拉”機制的更新解決方案。

    ?

    使用加密驗證技術,在使用應用程序更新之前驗證它們的真實性。

    ?

    在沒有用戶干預的情況下執行后部署配置任務。

    ?

    幫助您編寫能夠自動將其本身更新為可用的最新版本的應用程序。

    7.1 顯示了 Updater Application Block 的體系結構。

    apupf01

    7.1 Updater Application Block 體系結構

    有關 Updater Application Block 的詳細信息,請參閱“Updater Application Block for .NET”,網址為:http://msdn.microsoft.com/library/en-us/dnbda/html/updater.asp

    帶有應用程序更新存根的無接觸部署支持應用程序的事務性安裝。Updater Application Block 可幫助確保應用程序成功地完整安裝。要執行事務性安裝,您將需要包含相應的代碼,以便除了執行自動更新以外,還檢查是否已經在本地硬盤上安裝了所有代碼。這些代碼的形式可以是一個清單文件以及用于確定該清單中的每個文件都在本地硬盤上的代碼。

    通過將無接觸部署與應用程序更新存根結合起來,您可以得到許多好處,如簡化的部署和更新,以及在完全受信任的環境中運行您的應用程序的能力。上述好處使得這一混合式方法成為部署許多智能客戶端應用程序的有用選擇。但是,它并非在所有情況下都是理想的選擇。您仍然需要向應用程序存根授予足夠的權限,以使該存根能夠下載應用程序的其余部分。而且,使用該方法安裝的應用程序不提供 Windows 外殼程序集成(具體說來,就是與 Start 菜單或 Control Panel 中的 Add or Remove Programs 項目的集成),除非您將該功能構建到應用程序存根中。最后,部署和更新將僅發生在用戶的安全上下文中。如果您的應用程序需要向注冊表寫入,或者需要向文件系統的某個您禁止用戶訪問的部分寫入,則這一限制可能導致問題。

    從文件共享運行代碼

    從文件共享運行代碼類似于無接觸部署,不同之處在于您向用戶提供文件共享而不是 URL,以便其部署和運行應用程序。從文件共享運行的代碼按需下載,并且在適當的時候執行。因為該代碼是從網絡運行的,所以它將作為不完全受信任的應用程序運行,而且,除非您更改了客戶端上的安全策略,否則它通常從本地 Intranet 運行并且會獲得本地 Intranet 權限集。

    從文件共享運行代碼具有無接觸部署的許多優點和缺點,盡管代碼不像無接觸部署那樣緩存在客戶端上。因為從文件共享運行代碼具有一些安全限制,所以該方法通常并不適合于部署智能客戶端應用程序。

    像無接觸部署一樣,您可以采用將從文件共享運行代碼與自動更新存根結合起來的混合式方法。有關詳細信息,請參閱本章前面的“帶有應用程序更新存根的無接觸部署”。

    Xcopy 部署

    Xcopy 部署要求將應用程序包含的所有文件復制到客戶端計算機,以便運行該應用程序。智能客戶端應用程序通常只包含位于目錄層次結構中的一個或多個可執行文件、一個或多個 DLL 以及一個或多個配置文件。通過將上述所有文件復制到另一臺計算機,您就實質上安裝了該應用程序。要卸載該應用程序,只需將所有文件從計算機中刪除即可。

    如果為安裝應用程序只需要修改文件系統,則 Xcopy 方法可能是最佳選擇。但是,因為您無法對安裝過程進行編程控制,所以 Xcopy 方法 允許您執行下列操作:

    ?

    將程序集部署到全局程序集緩存(以及維護引用)

    ?

    部署 COM 對象

    ?

    部署要求注冊或者進行其他注冊表更改的組件

    ?

    與 Windows 外殼程序集成

    如果您的應用程序要求附加的安裝步驟,則您或許會在復制文件之后手動執行上述步驟。例如,如果您需要修改注冊表,則可以在目標計算機上編輯注冊表或者導入 *.reg 文件,以確保使適當的設置就緒。如果您需要將程序集部署到全局程序集緩存,則可以使用帶 /ir 開關的 Gacutil.exe 實用工具,以便將程序集安裝到帶有跟蹤引用的全局程序集緩存中。可以通過使用 /ur 開關在卸載程序集時刪除這些引用。

    您還可以在 Windows 資源管理器中使用拖放操作將共享程序集移動到全局程序集緩存文件夾中。但是,您應該避免使用該方法,因為該方法沒有實現引用計數。沒有引用計數,其他應用程序的卸載例程可能導致您的應用程序所需的程序集被從全局程序集緩存中刪除。

    Xcopy 部署適合于某些智能客戶端應用程序,但是,在許多情況下,因為需要執行一些附加步驟才能使應用程序正常工作,所以使得這一看起來簡單的方法變得過于費力。

    Windows 安裝程序軟件包

    您可以將要安裝的應用程序打包為 Windows 安裝程序軟件包。該方法使您能夠不受限制地在目標計算機上安裝任何應用程序,盡管應用程序在運行時會受到安裝它的最終用戶的安全上下文的限制。

    Windows 安裝程序軟件包十分靈活和強大,因此您可以使用它們安裝那些對客戶端進行大量配置更改的非常復雜的應用程序。然而,它們也適合于那些具有簡單得多的安裝要求的應用程序。即使您已經將應用程序設計為在安裝時對客戶端具有最低限度的影響,您也應該考慮使用 Windows 安裝程序軟件包,因為它們通過在 Start 菜單和桌面上添加圖標以及向 Control Panel 中的 Add or Remove Programs 項目中添加應用程序,與 Windows 外殼程序集成。這一集成使您能夠有效地控制安裝以及在需要時卸載應用程序。

    您可以將下列組件中的任意組件或全部組件添加到 Windows 安裝程序軟件包:

    ?

    項目輸出組

    ?

    服務文件和文件夾

    ?

    程序集

    ?

    應用程序資源

    ?

    合并模塊

    ?

    CAB 文件

    ?

    依賴項

    ?

    注冊表設置

    ?

    項目屬性

    ?

    自定義操作

    ?

    用戶界面設計設置

    在您創建 Windows 安裝程序軟件包之后,您會具有多種用于將它分發到客戶端計算機的選擇,包括:

    ?

    使用企業“推”技術,如 SMS。

    ?

    使用 Active Directory 的“組策略”功能發布或分配該軟件包。

    ?

    允許用戶從媒體、文件共享或 URL 安裝該軟件包。

    通過使用“推”技術來安裝您的 Windows 安裝程序軟件包,您可以對安裝何時發生以及在何處發生擁有某種集中式控制。它還使您能夠控制企業內的哪些組應該擁有該應用程序或該應用程序的特定版本。例如,您可以確保安裝針對特定的用戶組在一天中的特定時間發生。但是,請記住,您可能需要大量的硬件和網絡帶寬(具體取決于應用程序的大小)來確保大規模部署能夠高效進行。

    Windows 安裝程序軟件包的最重要的優點之一是:如果您使用“組策略”或 SMS,則不需要用戶具有管理權限就可以安裝應用程序。Windows 安裝程序軟件包還自動支持事務性安裝。只有兩種可能:Windows 安裝程序軟件包將安裝所有文件和配置更改;或者,如果出現了什么問題,則 Windows 安裝程序將回滾整個安裝。

    Windows 安裝程序軟件包的靈活性意味著它適合于具有任何復雜性的安裝:從簡單地寫文件系統以及與 Control Panel 中的 Add or Remove Programs 項目集成的應用程序,到那些對客戶端進行許多重大配置更改的應用程序。

    注如果您使用 Windows 安裝程序軟件包來部署您的應用程序,則無須使用同一方法來部署更新。在許多情況下,將您的應用程序設計為在安裝后自動更新自身是比較好的做法。有關如何配置應用程序以便自動進行更新的詳細信息,請參閱本章后面的自動更新

    選擇正確的部署方法

    既然有如此之多可用于智能客戶端應用程序的部署選擇,那么確定適合于您的環境的正確選擇可能非常困難。但是,您的應用程序的要求以及您的用戶的需要通常將決定最佳的方法。

    下表概述了每種部署方法的特性。

    7.1 智能客戶端應用程序的部署方法

    無接觸部署 帶有應用程序更新存根的無接觸部署 從文件共享運行代碼 Xcopy 部署 Windows 安裝程序軟件包

    可靠的脫機訪問

    完全信任應用程序功能

    要求客戶端安全策略更改

    要求客戶端安全策略更改

    非超級用戶安裝

    取決于應用程序的要求

    取決于應用程序的要求和應用程序分發機制

    對系統影響小

    取決于應用程序的要求

    取決于應用程序的要求

    Windows 外殼程序集成

    無限制的安裝

    事務性安裝

    需要修改客戶端的 .NET Framework 安全策略

    是 — 如果客戶端需要在提升的權限下運行

    是 — 僅限于應用程序存根。

    是 — 如果客戶端需要在提升的權限下運行

    在許多情況下,最簡單的方法是使用 Windows 安裝程序軟件包將您的應用程序打包。Windows 安裝程序軟件包具有高度的靈活性,使您可以安裝具有任何復雜性的應用程序。如果您使用企業“推”技術(如“組策略”或 SMS)來部署您的 Windows 安裝程序軟件包,則還可以在管理安全上下文中安裝該應用程序,而無需考慮用戶的安全上下文。當您希望使用戶可以通過單擊 URL 來安裝他們的應用程序時,則帶有自動更新存根的無接觸部署也是一個可行的選擇,但是您將必須對目標計算機的本地安全策略進行更改,以確保您的應用程序存根應用程序可以在完全信任權限下運行。

    返回頁首返回頁首

    部署智能客戶端應用程序

    在最初部署您的智能客戶端應用程序之后,您的工作尚未完成。過一段時間之后,隨著您升級應用程序功能并且修復缺陷或解決安全漏洞,應用程序將需要更新。

    根據具體情況的不同,您可以使用也可以不使用與部署智能客戶端應用程序的方法相同的方法來更新它。例如,如果您最初使用 Windows 安裝程序軟件包來部署應用程序,則可以使用自動更新來部署更新。您的環境的具體情況通常將決定哪種更新方法最為適合。

    部署更新時的一個常見要求是能夠聯合更新基礎結構,以便多個更新不用在由單個實體控制的單個服務器或服務器場上競爭。例如,如果某個 ISV 已經創建了一個在客戶的整個企業中部署的智能客戶端應用程序,并且該 ISV 發布了該應用程序的一個更新,則該企業可能希望首先在他們的標準操作環境中下載并測試該更新,然后再將其傳播到整個企業中運行的所有計算機。通過聯合更新基礎結構,可以使這樣做變得可能。例如,更新服務器可能位于負責從該 ISV 獲取更新的客戶站點上。在該企業內部運行的客戶端可以從本地更新服務器獲取更新,但前提是 IT 管理員予以批準。使用該方法,還可以通過減輕單個服務器或服務器場的負載,提高更新基礎結構的性能和可伸縮性。

    在部署應用程序的更新時,您具有下列選擇:

    ?

    無接觸部署。更新的程序集被添加到 Web 服務器,以供客戶端自動下載。

    ?

    自動更新。應用程序被配置為自動從服務器下載并安裝更新。

    ?

    從文件共享獲取更新。更新的程序集被添加到網絡共享,以供客戶端自動下載。

    ?

    Xcopy 更新。更新被直接復制到客戶端。

    ?

    Windows 安裝程序軟件包部署。更新了 Windows 安裝程序軟件包,創建了新的軟件包,或者使用修補軟件包更新客戶端。

    對每個選擇進行詳細分析,以便您能夠確定哪個選擇最適合于您的環境,將是很有用的。

    無接觸部署更新

    如果您已經使用無接觸部署方法部署了簡單應用程序或更為復雜的應用程序的組成部分,則通過在 Web 服務器上放置新文件即可更新這些程序集。在應用程序加載程序集之前,.NET Framework 會自動在本地以及在 Web 服務器上檢查該程序集的時間戳,以便確定是否需要重新下載該程序集,或者是否可以只是從用戶的程序集下載緩存中運行該程序集。

    注無接觸部署具有許多限制,使其不適合于部署大多數智能客戶端應用程序。有關詳細信息,請參閱本章前面的無接觸部署

    盡管使用無接觸部署方法發布更新通常非常簡單,但您的客戶端有可能在升級過程中由于缺少對事務性安裝的支持而出現問題。如果您在客戶端使用應用程序的過程中更新目錄,則客戶端最初可能下載舊代碼,然后嘗試下載自那時起已經更新的其他代碼。這可能導致不可預知的結果,并且可能導致您的應用程序失敗。該問題最簡單的解決方案是將任何重要的更新都部署到 Web 服務器上的單獨目錄中,然后在部署完成后,將所有鏈接更改到這一新位置。

    注如果您選擇使用帶有自動更新存根的無接觸部署方法來部署您的應用程序,則請參閱下一節自動更新

    自動更新

    在大多數情況下,修補、重新打包和更新應用程序的最佳方法是將更新基礎結構構建到應用程序本身內。在此情況下,可以將客戶端應用程序設計為自動從服務器下載并安裝更新,并且由 IT 管理員將這些更新發布到服務器以供客戶端獲取。要達到此目的,您可以在應用程序中包含相應的代碼以便該應用程序能夠執行下列操作:

    ?

    自動檢查是否有更新。

    ?

    如果有更新則進行下載。

    ?

    通過應用這些更新來升級其自身。

    當您配置您的應用程序以自動更新時,確保將所有已更新的文件下載到客戶端十分重要。當您更新具有強名稱的程序集時,這一點尤其重要。調用具有強名稱的程序集的程序集必須指定具有強名稱的程序集的版本,因此如果您更新具有強名稱的程序集,您還必須更新任何調用它們的程序集。

    在配置事務性更新時,您可以使用代碼來檢查是否在本地安裝了這些更新,并根據清單來驗證它們。通常,您將決定在單獨的目錄中安裝更新,然后或者在成功安裝之后刪除原始目錄,或者保留原始目錄不動以提供后備應用程序。

    有關自動更新以及 Updater Application Block 的用法的詳細信息,請參閱本章前面的“帶有應用程序更新存根的無接觸部署”。

    注自動更新將通過 .NET Framework 版本 2.0 中的 ClickOnce 功能進行簡化。作為部署清單的一部分,您將能夠指定應用程序是否檢查更新以及何時應該檢查是否有更新,并且能夠指定備用的更新位置。

    從文件共享獲取更新

    您將程序集復制到文件共享時,則應用程序每次運行時,這些程序集都會被下載到客戶端并且不會緩存。像無接觸部署一樣,要更新原來通過從文件共享運行代碼部署的應用程序,只需將新代碼添加到文件共享。然后,客戶端在下次運行時將下載新代碼。

    Xcopy 更新

    如果您原來使用文件復制技術分發您的應用程序,則您可能希望以相同的方式部署更新。無論原來的部署機制如何,當更新比較簡單(如對配置文件進行的修改)時,文件復制仍然可能是更新應用程序的最有效方法之一。在這樣的情況下,在部署更新時,只需復制新文件,并且刪除任何不再需要的舊文件。

    通常,您只需通過復制新版本的程序集以覆蓋舊版本,更新專用程序集。然而,盡管您可以使用簡單的復制操作對具有強名稱的程序集進行初始部署,但您無法以這種方式更新具有強名稱的程序集并且讓您的應用程序(或其他程序集)自動使用該程序集。程序集的強名稱存儲在引用它的任何程序集的清單中,并且公共語言運行庫 (CLR) 將某個具有強名稱的程序集的不同版本視為完全不同的程序集。除非您另外指定,否則 CLR 會加載原來構建應用程序時所依據的具有強名稱的程序集的同一版本。

    Windows 安裝程序更新

    Windows 安裝程序提供了一種用于更新 .NET Framework 應用程序的全面解決方案。它的幾項功能經過專門設計,以便解決應用程序更新問題。

    Windows 安裝程序軟件包內置了對版本控制的支持。如果您正確地對應用程序進行版本控制,則 Windows 安裝程序軟件包能夠自動確保更新正確發生,并且您可以指定在安裝新的應用程序時是否要刪除以前版本的應用程序。

    如果您要使用“推”技術(如 SMS)來部署這些更新,則您還可以控制哪些用戶將獲得更新以及他們何時獲得這些更新。如果您要在更廣泛地部署更新之前通過特定的用戶組測試這些更新,則該功能尤其有用。

    如果您計劃使用 Windows 安裝程序技術升級您的應用程序,則您具有三個用于實現該升級的選擇:

    ?

    生成修補軟件包 (.msp) 并將其應用于當前安裝的應用程序。

    ?

    更新現有的 Windows 安裝程序文件。

    ?

    創建全新的 Windows 安裝程序文件。

    通常,如果您要使用 Windows 安裝程序來部署更新,則應該使用修補軟件包或者更新現有的 Windows 安裝程序文件。如果您創建全新的 Windows 安裝程序文件,則 Microsoft Windows? 不會將該軟件包識別為更新,并且 Windows 的升級管理功能將無法正常工作。但是,在某些情況下,更改是如此廣泛,以至于您可能選擇放棄該功能并創建新的 Windows 安裝程序文件。

    注有關使用 Windows 安裝程序部署更新的詳細信息,請參閱Deploying .NET-Framework-Based Applications,網址為:http://www.microsoft.com/downloads/details.aspx?FamilyId=5B7C6E2D-D03F-4B19-9025-6B87E6AE0DA6&displaylang=en

    返回頁首返回頁首

    選擇正確的更新方法

    在某些情況下,您選擇的更新方法由您為應用程序選擇的部署方法限定。但是,最適當的方法通常由您要部署的更新的性質決定。例如,您可能只是復制新文件以覆蓋舊文件,或者您可能希望更新的應用程序與舊應用程序并列運行。更新可能涉及到將新的程序集添加到全局程序集緩存,或者更改注冊表中的配置信息。如果您要部署對具有強名稱的程序集的更新,則更新將變得更為復雜,因為調用具有強名稱的程序集的每個程序集都將在調用中使用版本號。

    表 7.2 概述了可用于更新應用程序的選擇以及每個選擇所支持的功能。

    7.2 智能客戶端應用程序的更新方法

    無接觸部署更新 帶有應用程序更新存根的自動更新 從文件共享獲取更新 Xcopy 更新 Windows 安裝程序更新

    非超級用戶更新

    取決于應用程序的要求

    取決于應用程序的要求和應用程序分發機制

    集中式更新管理

    取決于應用程序分發機制

    在運行應用程序時下載更新

    聯合的更新基礎結構

    逐個用戶/組進行更新

    取決于應用程序分發機制

    事務性更新

    內置的版本控制支持

    在許多情況下,自動更新是部署應用程序更新的最有效的方法。但是,在部署重大更新或涉及到對客戶端進行復雜配置更改的更新時,您可能需要使用 Windows 安裝程序(它也具有自動版本控制支持的好處)。

    小結

    部署智能客戶端應用程序要比過去部署胖客戶端應用程序容易得多,這要歸功于 .NET Framework 所具有的功能。但是,要成功完成部署,您需要進行大量重要的選擇,包括如何設計您的應用程序以便于部署,以及您為應用程序和 .NET Framework 本身選擇哪種部署方法這兩個方面。

    在大多數情況下,部署應用程序的最佳選擇是使用 Windows 安裝程序軟件包,或者使用無接觸部署和應用程序更新存根的組合。您將需要考慮在部署應用程序之后如何有效地維護該應用程序以及部署更新。同樣,在大多數情況下,最佳選擇很可能是 Windows 安裝程序或由應用程序本身控制的自動更新。

    轉到原英文頁面

    posted on 2006-02-10 14:57 TrampEagle 閱讀(495) 評論(0)  編輯  收藏 所屬分類: 技術文摘
    主站蜘蛛池模板: 亚洲综合视频在线观看| 亚洲综合免费视频| 免费国产黄网站在线看| 豆国产96在线|亚洲| 亚洲AV永久无码精品放毛片| 亚洲av永久中文无码精品综合| 亚洲欧洲专线一区| 在线观看国产一区亚洲bd| 在线精品自拍亚洲第一区| 美女视频黄频a免费观看| 免费精品视频在线| 一级毛片大全免费播放下载| 一级毛片免费不卡| 国精产品一区一区三区免费视频 | 永久免费看mv网站入口| 成年女人毛片免费播放人| 在线a人片天堂免费观看高清| 午夜一区二区免费视频| 看全色黄大色大片免费久久 | 久久久久久免费一区二区三区| 国产精品区免费视频| 最近2018中文字幕免费视频| h在线观看视频免费网站| 欧美a级在线现免费观看| 国产男女猛烈无遮挡免费视频网站| 免费h黄肉动漫在线观看| 亚洲婷婷五月综合狠狠爱| 亚洲人成在线播放网站岛国| 亚洲国产亚洲综合在线尤物| 亚洲一久久久久久久久| 免费精品国自产拍在线播放| 亚洲免费人成在线视频观看 | caoporn国产精品免费| 日韩电影免费在线观看网站| 1000部啪啪未满十八勿入免费| 插B内射18免费视频| 亚洲真人日本在线| 久久久亚洲欧洲日产国码二区| 亚洲综合一区国产精品| 国产激情久久久久影院老熟女免费| 久久免费国产视频|