熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

.NET應用自動部署窗體技術詳解(1)

2022-06-13   來源: Java核心技術 

  NET框架提供了一些新的工具簡化NET胖客戶端程序的部署本文闡述了NET自動部署技術的基礎知識以及防止用戶錯誤下載黑客程序和病毒代碼的安全機制
  NET的自動部署技術構造在NET框架之中它使得應用程序能夠通過HTTP連接從遠程服務器按需下載程序集有了這個功能我們可以把胖客戶端應用程序發布到一個Web服務器確保用戶下一次使用應用程序時總是自動得到程序的最新版本設想一下吧再也不必用CD來發布升級軟件再也不必在電話中向用戶反復解釋因版本沖突引起的問題!
  NET提供了大量用於實現自動部署機制的功能例如NET知道如何從一個遠程服務器下載程序集並把它保存到用戶的磁盤緩沖區而且只有當遠程服務器上又有了新的版本時才再次下載——所有這些功能都已經構建到了NET框架之中
  自動部署執行文件
  自動部署NET Windows窗體應用程序的機制可分為兩部分第一部分是自動部署主執行文件第二部分是允許用戶使用應用程序時下載應用的其余部分
  首先我們來看看第一部分讓用戶訪問主執行文件很簡單只要把執行文件發布到Web服務器然後把URL告訴用戶例如假設執行文件的名字為loaderexe我們可以在企業的Web服務器上創建一個虛擬目錄然後把執行文件的位置告訴每一個用戶
  用戶只要用浏覽器打開這個URL或者在開始菜單運行輸入框輸入這個URL就可以運行loaderexe執行文件另外我們還可以創建一個Web頁面加入一個指向loaderexe的HTML HREF標記
  
 

  
從Web服務器發布執行文件

  下面我們運行一下本文下載包中的一個NET執行文件
  ⑴ 從本文最後下載文件將文件解壓縮到C:\CodeDownloadDemo文件夾
  ⑵ 在IIS中創建一個虛擬文件夾CodeDownloadDemo
  ⑶ 將虛擬文件夾映射到C:\CodeDownloadDemo\Loader\Bin文件夾
  ⑷ 啟動IE浏覽器輸入下面的URL
  看到loader應用程序在浏覽器外面運行了嗎?應用程序一旦開始運行即使關閉了浏覽器我們仍可以訪問應用程序對於任何其他NET應用程序我們都可以照此辦理只要將它放到Web服務器上然後用浏覽器啟動即可
  UrlScan工具的影響
  只要Web服務器上沒有安裝UrlScan工具上面的例子就可以毫無問題地運行UrlScan工具隨同IIS Lockdown工具一起發行它的功能是禁止向Web服務器發送非法的請求默認情況下UrlScan工具認為包含執行文件的URL都是非法的因此如果Web服務器上安裝了UrlScan對的訪問將被禁止
  要檢查系統中是否已經安裝了UrlScan工具可以在控制面板中打開添加或刪除程序查看當前安裝的程序清單
  另外我們還可以修改UrlScan的默認配置使其允許對執行文件的請求即修改一下UrlScan用來檢測合法/非法請求的INI配置文件UrlScan的配置文件保存在c:\windows\system\inetsvr\urlscan\urlscanini下面是該文件的一個片斷
  [DenyExtensions]
  ; Deny executables that could
  ; run on the server
  was_exe
  bat
  cmd
 
  這個配置文件片斷中exe文件擴展名已經改成了was_exe表示exe擴展名不再被禁止但必須注意的是這是解除UrlScan限制的一種簡便方法可能帶來安全風險對於正式為用戶提供服務的Web服務器修改配置之前務必閱讀UrlScan的文檔或詢問網絡管理員
  修改UrlScan的INI配置文件之後必須重新啟動IIS服務器才能讓修改生效例如在命令行環境中執行IISRESETexe就可以重新啟動IIS服務器
  自動部署應用程序的其余部分
  前面我們了解了如何自動部署一個執行文件這種辦法對於loader(約 KB)之類的小型應用程序有效但通常的應用程序都要大於 KB例如如果應用程序有 MB我們不應該讓用戶每次運行時都重新下載一個 MB的文件解決這個問題需要用到NET自動部署機制的第二部分技術
  和前面的辦法相比一種更好的辦法是將主執行程序安裝到用戶的硬盤上讓這個主執行程序按需下載應用程序的其余部分例如當用戶要用到應用程序的Invoicing模塊時就下載Invoicing部分要用到Employees模塊時就下載Employees部分(參見圖
  
 

  
自動部署一個應用程序

  這種類型的部署通常稱為滴流部署(Tickle Down Deployment)NET框架提供了支持滴流布署技術的必要工具類即SystemReflection名稱空間中的AssemblyAssembly類能夠從遠程服務器下載一個程序集並在本地緩沖以供以後引用例如利用下面的代碼可以//localhost/CodeDownloadDemo/Loader/下載ModuleAdll程序集然後從該程序集創建EmployeeForm類的實例
  指定URL
  Dim URL As String
  URL = _
 
  從指定的URL裝入程序集
  Dim a As [Assembly]
  a = [Assembly]LoadFrom(URL)
  獲得一個EmployeeForm類的引用
  Dim t As Type = aGetType(ModuleAEmployeeForm)
  創建窗體的實例並顯示出窗體
  Dim o As Object = ActivatorCreateInstance(t)
  oShow()
  這個代碼片斷雖然簡單卻用到了NET框架許多值得關注的特性下面我們就來逐一分析這些特性
  首先[Assembly]LoadFrom這行代碼利用HTTP協議下載一個DLL在本例中URL指向localhost但它同樣也可以指向一個遠程服務器例如這就是說我們只要一行代碼並指定一個適當的URL其余工作就全交給NET了不管程序集是本地的還是遠程的
  其次從遠程服務器下載得到一個DLL之後aGetType這行代碼從該DLL提取一個類的引用注意類的名稱以字符串的形式指定這意味著我們可以在運行時臨時決定要引用的類的名稱這一點非常重要因為現在我們可以在運行時決定要引用的是ModuleAEmployeeForm還是ModuleAInvoiceForm對於VBNET和C#之類強類型的語言這一特性顯得尤其寶貴它提供的靈活性是這類語言中非常罕見的
  最後ActivatorCreateInstance(t)這行代碼實際創建了EmployeeForm類的一個實例有了類的實例之後接下來就可以調用它的方法設置它的屬性在上面的例子中我們調用了EmployeeForm類的Show方法
  localhost與的區別
  當我們指定的URL是//localhost形式時前面兩節介紹的辦法都不會出現問題但是如果我們改用形式的URL就會遇到問題例如如果用這個URL來打開loaderexe就會看到類似圖的錯誤信息
  

  
訪問時出現的錯誤

  系統的配置不同具體的錯誤信息也不同但不管錯誤信息到底是什麼用總是可以看到與安全有關的錯誤信息
  當我們通過一個URL來運行應用程序時應用程序可能來自一個遠程服務器但是NET不能肯定我們想要運行的代碼是來自一個可信任的服務器還是一個受限制的站點NET對遠程代碼采用的安全策略相當復雜簡單地說NET把那些不包含句點符號()的URL視為本地Intranet的URL默認情況下NET允許運行來自Intranet站點的代碼另一方面NET把那些包含了句點符號的URL(例如)視為Internet地址除非明確地設定某個URL是一個安全的位置否則NET默認不允許運行Internet URL的程序代碼
  安全策略是NET框架必不可少的組成部分如果沒有安全策略允許用戶將浏覽器指向任何URL下載NET執行文件並自動運行那只會把網絡變成病毒編寫者的天堂有了NET安全策略我們就可以保護用戶避免用戶下載和運行來源不明的代碼
  也許大家已經知道NET框架是一個與操作系統緊密集成的系統安全機制是這種緊密集成特別明顯的領域之一NET安全策略不僅強大而且具有高度可配置的特點下面我們就來了解一下這些安全策略的基本組織以及如何配置安全策略允許用戶從可信任的URL下載執行文件

From:http://tw.wingwit.com/Article/program/Java/hx/201311/26971.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.