Updater Application Block提供後處理架構,該架構允許開發人員建立在升級成功執行的後處理器。後處理器實現IPostProcessor介面的.Net類,用它執行一次性的安裝後任務,例如向註冊表寫資料、建立訊息佇列、或者其他任何無法通過簡單拷貝應用程式檔案完成的任務。
後處理器架構在圖1中展示出來。
圖1中,展示了下面的後處理步驟:
1. 包含後處理器的集合儲存在被下載的檔案中,作為升級的一部分。
2. 後處理器的集合、類型、檔案名稱在manifest中指定。
3. 在驗證後,拷貝檔案到它們的目標目錄,應用程式升級器通過啟動調用Call方法啟動後處理器。
IPostProcessor介面設計
IPostProcessor介面必須通過所有的定製後處理器實現。下面將討論IPostProcessor介面的以下幾個方面:
問題描述
設計目標、權衡和問題
解決方案描述
具體實現
問題描述
應用程式設計工具可以執行開發人員建立的後處理器以便執行指定應用程式的安裝後任務,為了實現這一功能,所有的後處理器必須實現一個通用的介面。
設計目標、權衡和問題
Updater Application Block的開發人員識別出以下一些與IPostProcessor介面相關的設計目標、權衡和問題:
1. IPostProcessor介面的主要設計目標是它應該足夠簡單
2. 主要的權衡涉及簡單介面的需求和該介面能夠為開發人員提供的用複雜初始化參數建立後處理器的能力。最後,選擇了一個簡單的方法
3. 如果需要複雜初始化參數,開發人員必須在升級檔案中包括初始設定檔案(如一個包含必要資料的xml檔案),並且在後處理器中實現裝載和讀取檔案的代碼。
解決方案描述
IPostProcessor介面暴露了一個Run方法。
具體實現
VB.NET
public interface IPostProcessor : IDisposable
{
void Run();
}
C#
Public Interface IPostProcessorInterface IPostProcessor
Inherits IDisposable
Sub Run()Sub Run()
End Interface
注意,由於IPostProcessor派生於IDisposable介面,所以開發人員在實現IPostProcessor介面的同時,必須實現IDisposable介面。
你還必須注意到,應用程式升級器在單一的線程上執行後處理器,並且不具有拋出異常或清除使用過的資源的能力。定製的後處理器實現應該確保 Dispose方法在Run方法完成後被調用,或在某次提前的退出後被調用。開發人員還必須確認所有的異常,包括線程中止,都能被處理,如果需要的話,還可以記錄下來。