亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

.NET 和智能傳輸服務API編寫自動更新程序

2019-11-18 12:01:52
字體:
來源:轉載
供稿:網友

  我必須承認,我喜歡 Windows? Update 功能。 在我的計算機開機的時間中,大約有 85% 的時間都連接到了 Internet 上,但是,像許多人一樣,我當然不會這么多時間都在使用網絡。 Windows xp 利用了這一未用的帶寬,將網上可用的最新服務包和修補程序與我計算機上已安裝的服務包和修補程序進行比較。 假如它找到了我需要的更新,便會在后臺將它們下載下來。 完成后,Windows 會通知我計算機上有需要安裝的新軟件包。
  
  假如可以選擇的話,我希望讓客戶端上的每一個應用程序都像 Windows 一樣答應自動更新。 現在有許多有利的條件以及現成的連接來實現這一功能。 假如要使應用程序自動進行自我更新,必須編寫代碼來處理發現、下載、安全性以及替換等方面的問題。
  
  為了處理實際的下載,我將介紹 Windows 的一項新功能:后臺智能傳輸服務 (BITS)。 在討論此功能之后,我將介紹 .NET Framework 中可用來解決自動更新應用程序的安全性和替換問題的功能。
  
  請注重,雖然 BITS 1.5 可重新發布軟件可以很好地工作在 windows 2000 和 Windows XP 上,但是 Microsoft 不打算在 Windows 9x 或 Windows Me 上支持 BITS API。 BITS 有望作為 Windows 的將來版本的一個組件提供。
  
  但是,在開始下面的內容之前,需要指出的重要一點是:要使您的應用程序能夠使用本文所介紹的技術,需要在 .NET 下對它進行治理。 BITS 自身是操作系統的一部分,而這里介紹的 .NET Framework 技術可以用于非托管的應用程序的自動更新功能。
  
  困難
  為了找到遠程服務器上的更新,您的應用程序需要一種查詢網絡的手段。 這需要網絡代碼以及使應用程序和服務器可以用來彼此通信的簡單協議。 我將在本文的后面繼續探討“發現”這個話題。
  
  接下來您還必須能夠下載軟件包。 由于 .NET 在網絡方面駕輕就熟,因此下載可能看上去不像是一個大問題,但是下載用戶所請求的文件僅僅是一個方面。另一個方面是在未經用戶同意的情況下下載大型文件。 禮貌的自動更新應用程序僅僅使用殘留的帶寬來下載更新。 這聽起來很不錯,但是,您會看到,它帶來了一個相當困難的技術問題。 幸運的是,相應的解決方案已存在。
  
  安全可能是首當其沖的一個問題。 請花一點時間想一想 Windows Update 功能。 它的一個主要目的是獲取安全修補程序。 想想,假如 Windows Update 自身都不能確認它安裝的是否是安全的代碼,情況會怎么樣? 顯而易見,從 Internet 上下載代碼并執行該代碼的任何應用程序都必須將安全性作為一個首要問題。 因此,我將探討如何確保自動更新應用程序的安全性。
  
  最后一個需要考慮的因素是使用應用程序自身的新版本來替換應用程序的過程。 此問題之所以引人關注,是因為它要求代碼在將自身從系統中刪除時能夠運行。 處理這一技巧有許多種方法。
  
  關于這些困難,最慶幸的一件事情是在 .NET Framework 與 Windows 之間,所有工具都是現成的,可以馬上用來解決這些問題。
  
  BITS 基礎知識
  BITS 是 Windows 中新增的一項非常實用的文件傳輸功能,它通過 HTTP 異步地從遠程服務器上下載文件。 BITS 可以專門利用空閑帶寬來處理多個用戶的多個下載任務。 盡管 BITS 不僅僅限于自動更新應用程序使用,但它是 Windows Update 使用的基礎 API。 并且,由于它可用于任何應用程序,因此可用來完成創建自動更新應用程序的過程中所涉及到的大部分非常困難的工作。
  
  下面是基本思想。 應用程序請求 BITS 處理一個或一組文件的下載。 BITS 將該任務添加到自己的隊列中,并將該任務與應用程序所運行在的用戶上下文關聯。 只要用戶登錄,BITS 就會利用空閑帶寬在網絡中細細搜尋 (Drizzle) 這些文件。 事實上,BITS 技術的代號名稱就是 Drizzle,這個詞被證實是 BITS 所執行的工作的一個非常恰當的描述。
  
  那么它到底是怎樣工作的呢? 這項技術實際是一項非常復雜的技術。 首先,BITS 是作為一個 Windows 服務實現的,它維護組織成一組優先級隊列的任務集合。 優先級包括前臺、高、普通和低。 它按照循環法的原則,通過大約五分鐘的時間片為同一優先級的每個任務分配帶寬。 一旦隊列中沒有剩余的任務,便立即檢查下一個優先級隊列中的任務。
  
  前臺隊列中的任務使用盡可能多的網絡帶寬,由于這一原因,前臺優先級應只供響應用戶請求的代碼使用。 余下的優先級(高、普通和低)遠遠比前臺優先級更引人關注,因為它們全都是后臺優先級,也就是說,它們僅僅使用未用的網絡帶寬。
  
  為了實現此后臺功能,BITS 監視網絡數據包,并忽略不屬于它的數據包。 余下的數據包被認為是計算機帶寬上的活動負載。 BITS 使用活動負載信息以及連接速度和其他某些統計信息來確定應繼續下載文件還是暫停(以增加活動用戶的吞吐量)。 因此,用戶不會碰到帶寬問題。
  
  能夠立即中斷所做的工作對于 BITS 是非常重要的。 在許多情況下,BITS 不得不在僅僅下載了文件的一部分的情況下放棄與網絡的連接甚至完全斷開連接。 但是,下載了一部分的文件會保存起來,這樣,當 BITS 抓住了與網絡連接的片刻機會時,便能夠從中斷的位置繼續下載。 這種恢復功能也有一些副作用。
  
  請記住 BITS 是用于從 HTTP 服務器傳輸文件的。 要使 BITS 能夠工作,服務器應與 HTTP 1.1 兼容,或者至少支持 GET 方法中的 Range 頭。 這是因為 BITS 需要能夠請求文件的一部分。 此外,下載的內容必須是靜態內容,例如,標記文件、代碼文件、位圖或聲音。 當請求動態內容(例如,CGI、ISAPI 或 asp.net 產生的內容)時,包含 Range 頭的 GET 請求沒有意義。
  
  當前,BITS 有兩個版本: 1.0 和 1.5。 BITS 1.0 隨同 Windows XP 一起提供,它具有下列功能: 可與對話框及其他 UI 元素一起使用的可中斷后臺文件下載、下載優先級、任務完成及出錯時的可選通知以及可選的進度通知。 BITS 1.5 隨同 Windows .NET Server 一起提供。 除了 BITS 1.0 中包含的功能外,1.5 版還具有可中斷的后臺文件上載以及使用“基本”、“摘要”、“NTLM”、“協商”(Kerberos) 或“Passport”對連接進行身份驗證的功能。 BITS 1.5 還作為與 Windows 2000 及更高版本兼容的可重新發布軟件提供(請參閱后臺智能傳輸服務)。
  
  BITS 1.0 中的全部功能對于編寫自動更新應用程序已夠用,但是使用 BITS 1.5 功能可以執行更復雜的任務,例如,出售更新或處理應用程序與服務器之間的交互。
  
  BITS、COM 和托管代碼
  BITS API 是作為 COM 對象實現的,正因為此,所以不能編寫 .NET Framework 版的 API。 幸運的是,BITS API 非常簡單易用。 本文所包含的示例應用程序是使用 C# 編寫的,因此為了使用 BITS API,我不得不硬著頭皮使用 .NET Framework 的 COM Interop 功能。 我在這里不深入探討運行庫可調用包裝 (RCW) 及相關的內容,而僅僅說明我使用此 API 所遵循的過程。
  
  假如我使用的是 C++,那么我的 BITS 代碼的開頭部分可能如下所示:
  
  IBackgroundCopyManager* pBCM = NULL;
  
  hr = CoCreateInstance(__uuidof(BackgroundCopyManager), NULL,
     CLSCTX_LOCAL_SERVER, __uuidof(IBackgroundCopyManager),
     (void**) &pBCM);
  if (SUCCEEDED(hr)) {
  // Party-on with the pBCM interface pointer
  }
  
  等效的 C# 代碼使用 new 要害字創建 BackgroundCopyManager 對象,然后通過轉換獲得對 IBackgroundCopyManager 接口的引用,而不是通過調用像 CoCreateInstance 或 QueryInterface 這樣的方法。 下面的代碼片段是 C# 示例,它的作用是獲取 IBackgroundCopyManager 接口:
  
  IBackgroundCopyManager bcm = null;
  // Create BITS object
  bcm = (IBackgroundCopyManager)new BackgroundCopyManager();
  
  此代碼的簡單性有一點誤導的作用,因為需要做更多的工作來分別將托管的 BackgroundCopyManager 和 IBackgroundCopyManager 類型與底層的 COM 對象和接口關聯。 .NET Framework 通過 RCW 來處理與 COM 對象的交互。 要將托管類型與 RCW 關聯,必須使用屬性。 圖 1 中的代碼說明了如何聲明 BackgroundCopyManager 類和 IBackgroundCopyManager 接口,以使它們表示 BITS COM 對象。
  
 .NET 和智能傳輸服務API編寫自動更新程序

  圖 1 中的代碼有很多的屬性(ComImportAttribute、GuidAttribute、MarshalAsAttribute 等等),這使真正的代碼看起來不明顯。 事實上,沒有真正的代碼。 接口和類的定義實際上僅僅是元數據形式的封送占位符,公共語言運行庫 (CLR) 用它來直接調用 BITS COM API。
  
  代碼示例(請見本文頂部的鏈接)所包含的 InteropBits.cs 文件提供了與 BITS API 一起使用的所有接口、枚舉類型及結構的 C# Interop 代碼。 盡管示例僅僅使用了幾個方法,但是我提供了完整的實現,因為它有助于您探索此 API 的更多功能。 值得注重的一點是,InteropBits.cs 文件中的代碼不是托管 API,而是 COM API 實現之上的 Interop API。 Microsoft 終有一天會發布通過與 .NET Framework 類庫的其余部分一致的方法向 .NET Framework 代碼公開 BITS 功能的 API。
  
  圖 1 中的代碼以及 InteropBits.cs 示例文件中的完整實現是手動創建的。 .NET Framework SDK 自帶一個名為 TlbImp.exe 的工具。假如您有一個描述所針對的 COM API 的 TLB 文件,可以使用此工具創建類似的代碼,并將其編譯為托管程序集。 BITS API 不自帶 TLB 文件,但是,Platform SDK 中包含一個名為 Bits.idl 的接口定義文件,該文件

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91在线播放九色快色| 欧美国产日产韩国视频| 亚洲美女性生活视频| 亚洲欧美中文日韩v在线观看| 欧美—级a级欧美特级ar全黄| 欧美黑人性生活视频| 欧美中文在线观看| 亚洲免费视频观看| 欧美另类第一页| 欧美大人香蕉在线| 亚洲jizzjizz日本少妇| 亚洲成av人影院在线观看| 亚洲最大的免费| 久久精品一本久久99精品| 日韩成人在线免费观看| 亚洲日韩中文字幕| 日韩中文字幕亚洲| 曰本色欧美视频在线| 免费91麻豆精品国产自产在线观看| 91精品在线观| 欧美黑人又粗大| 亚洲成人免费在线视频| 国产精品免费一区二区三区都可以| 97国产精品视频人人做人人爱| 亚洲午夜精品久久久久久久久久久久| 欧美精品日韩www.p站| 91精品国产91久久久久| 亚洲一区二区三区xxx视频| 久久亚洲影音av资源网| 午夜精品久久久久久久99热浪潮| 大桥未久av一区二区三区| 欧美激情视频一区二区三区不卡| 中文字幕亚洲一区二区三区| 国产免费一区二区三区在线观看| 韩曰欧美视频免费观看| 成人网欧美在线视频| 91香蕉亚洲精品| 中文字幕无线精品亚洲乱码一区| 欧美国产视频一区二区| 国产91精品最新在线播放| 成人国产精品一区二区| 91久久久国产精品| 国内精品中文字幕| 国产成人精品在线播放| 日韩视频―中文字幕| 色先锋资源久久综合5566| 国产精品永久免费视频| 日韩中文字幕av| 不卡av电影在线观看| 日韩亚洲在线观看| www.xxxx精品| 激情av一区二区| 亚洲欧美成人一区二区在线电影| 亚洲美女在线观看| 亚洲美女在线视频| 久久久久亚洲精品成人网小说| 26uuu另类亚洲欧美日本老年| 日韩成人av在线播放| 在线视频欧美日韩精品| 在线成人一区二区| 亚洲男人天堂古典| 性色av一区二区三区| 亚洲精品久久久久久久久| 成人欧美一区二区三区黑人| 日本久久久久久久久久久| 欧美激情国内偷拍| 国产免费一区二区三区在线观看| 中文字幕日韩欧美在线| 亚洲成人久久一区| 精品网站999www| 国产免费成人av| 久久久久久这里只有精品| 欧美巨大黑人极品精男| 海角国产乱辈乱精品视频| 久久国产精品久久久| 国产欧美一区二区三区在线| 精品久久久久久久久久国产| 日韩电影视频免费| 日韩欧美国产高清91| 91精品中国老女人| 欧美美最猛性xxxxxx| 国产香蕉精品视频一区二区三区| 久久精品视频网站| 亚洲精品国产精品自产a区红杏吧| 国产午夜精品视频| 亚洲视频在线观看视频| 最新日韩中文字幕| 欧美激情视频网站| 国产日韩在线免费| 精品久久久久久中文字幕| 日韩一区二区三区国产| 国产91精品高潮白浆喷水| 国产精品大陆在线观看| 九九热最新视频//这里只有精品| 亚洲精品成人久久电影| 91视频8mav| 7777精品视频| 日韩av男人的天堂| 成人天堂噜噜噜| 97福利一区二区| 日本成人在线视频网址| 日韩成人av网| 国产视频精品xxxx| 国产97色在线|日韩| 免费不卡欧美自拍视频| 国模精品一区二区三区色天香| 国产在线视频欧美| 伊人亚洲福利一区二区三区| 精品久久中文字幕久久av| 黑丝美女久久久| 91在线直播亚洲| 亚洲精品国产品国语在线| 久久久久国产一区二区三区| 97在线看福利| 亚洲国产日韩欧美在线动漫| 国产精品99久久久久久久久久久久| 尤物yw午夜国产精品视频明星| 欧美日韩国产中文精品字幕自在自线| 久久久精品美女| 国产精品视频导航| 精品久久久在线观看| 久久免费视频在线观看| 国产精品免费在线免费| 久久免费国产视频| 国产欧美精品一区二区三区介绍| 亚洲欧美999| 久久偷看各类女兵18女厕嘘嘘| 国产福利精品视频| 国产精品亚洲精品| 高清欧美性猛交xxxx| 国产成人精品国内自产拍免费看| 亚洲欧美日韩国产精品| 国产精品欧美日韩久久| 成人福利免费观看| 日本一区二三区好的精华液| 高清日韩电视剧大全免费播放在线观看| 国产主播精品在线| 97av在线播放| 青草热久免费精品视频| 91成人在线播放| 欧美在线日韩在线| 久久久久久香蕉网| 亚洲福利在线视频| 欧美日韩国产黄| 国产精品国产三级国产专播精品人| 久久久亚洲影院你懂的| 亚洲图片欧洲图片av| 538国产精品一区二区在线| 亚洲2020天天堂在线观看| 亚洲黄色av网站| 国语自产精品视频在线看一大j8| 免费91麻豆精品国产自产在线观看| 日韩欧美在线第一页| 性欧美暴力猛交69hd| 欧美综合在线第二页| 最新的欧美黄色| 日本乱人伦a精品| 欧美一级视频在线观看| 欧美激情伊人电影| 亚洲一区中文字幕| 久热精品视频在线| 国产精品激情av在线播放| 欧美猛交ⅹxxx乱大交视频| 日韩精品在线免费播放|