NET框架提供了一些新的工具簡化
NET胖客戶端程序的部署
本文闡述了
NET自動部署技術的基礎知識
以及防止用戶錯誤下載黑客程序和病毒代碼的安全機制
NET的自動部署技術構造在
NET框架之中
它使得應用程序能夠通過HTTP連接從遠程服務器按需下載程序集
有了這個功能
我們可以把胖客戶端應用程序發布到一個Web服務器
確保用戶下一次使用應用程序時總是自動得到程序的最新版本
設想一下吧
再也不必用CD來發布升級軟件
再也不必在電話中向用戶反復解釋因版本沖突引起的問題!
NET提供了大量用於實現自動部署機制的功能
例如
NET知道如何從一個遠程服務器下載程序集並把它保存到用戶的磁盤緩沖區
而且只有當遠程服務器上又有了新的版本時才再次下載——所有這些功能都已經構建到了
NET框架之中
一自動部署執行文件 自動部署
NET Windows窗體應用程序的機制可分為兩部分
第一部分是自動部署主執行文件
第二部分是允許用戶使用應用程序時下載應用的其余部分
首先我們來看看第一部分
讓用戶訪問主執行文件很簡單
只要把執行文件發布到Web服務器
然後把URL告訴用戶
例如
假設執行文件的名字為loader
exe
我們可以在企業的Web服務器上創建一個虛擬目錄
然後把執行文件的位置告訴每一個用戶
用戶只要用浏覽器打開這個URL
或者在
開始
菜單
運行
輸入框輸入這個URL
就可以運行loader
exe執行文件
另外
我們還可以創建一個Web頁面
加入一個指向loader
exe的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\urlscan
ini
下面是該文件的一個片斷
[DenyExtensions]
; Deny executables that could
; run on the server
was_exe
bat
cmd
這個配置文件片斷中
exe文件擴展名已經改成了
was_exe
表示
exe擴展名不再被禁止
但必須注意的是
這是解除UrlScan限制的一種簡便方法
可能帶來安全風險
對於正式為用戶提供服務的Web服務器
修改配置之前務必閱讀UrlScan的文檔或詢問網絡管理員
修改UrlScan的INI配置文件之後
必須重新啟動IIS服務器
才能讓修改生效
例如
在命令行環境中執行IISRESET
exe就可以重新啟動IIS服務器
三自動部署應用程序的其余部分 前面我們了解了如何自動部署一個執行文件
這種辦法對於loader(約
KB)之類的小型應用程序有效
但通常的應用程序都要大於
KB
例如
如果應用程序有
MB
我們不應該讓用戶每次運行時都重新下載一個
MB的文件
解決這個問題需要用到
NET自動部署機制的第二部分技術
和前面的辦法相比
一種更好的辦法是將主執行程序安裝到用戶的硬盤上
讓這個主執行程序按需下載應用程序的其余部分
例如
當用戶要用到應用程序的Invoicing模塊時就下載Invoicing部分
要用到Employees模塊時就下載Employees部分(參見圖
)
圖自動部署一個應用程序 這種類型的部署通常稱為
滴流
部署(Tickle Down Deployment)
NET框架提供了支持滴流布署技術的必要工具類
即System
Reflection名稱空間中的Assembly
Assembly類能夠從遠程服務器下載一個程序集
並在本地緩沖以供以後引用
例如
利用下面的代碼可以//localhost/CodeDownloadDemo/Loader/下載ModuleA
dll程序集
然後從該程序集創建EmployeeForm類的實例
指定URL
Dim URL As String
URL = _
從指定的URL裝入程序集
Dim a As [Assembly]
a = [Assembly]
LoadFrom(URL)
獲得一個EmployeeForm類的引用
Dim t As Type = a
GetType(
ModuleA
EmployeeForm
)
創建窗體的實例
並顯示出窗體
Dim o As Object = Activator
CreateInstance(t)
o
Show()
這個代碼片斷雖然簡單
卻用到了
NET框架許多值得關注的特性
下面我們就來逐一分析這些特性
首先
[Assembly]
LoadFrom這行代碼利用HTTP協議下載一個DLL
在本例中
URL指向localhost
但它同樣也可以指向一個遠程服務器
例如
這就是說
我們只要一行代碼
並指定一個適當的URL
其余工作就全交給
NET了
不管程序集是本地的還是遠程的
其次
從遠程服務器下載得到一個DLL之後
a
GetType這行代碼從該DLL提取一個類的引用
注意
類的名稱以字符串的形式指定
這意味著
我們可以在運行時臨時決定要引用的類的名稱
這一點非常重要
因為現在我們可以在運行時決定要引用的是ModuleA
EmployeeForm
還是ModuleA
InvoiceForm
對於VB
NET和C#之類強類型的語言
這一特性顯得尤其寶貴
它提供的靈活性是這類語言中非常罕見的
最後
Activator
CreateInstance(t)這行代碼實際創建了EmployeeForm類的一個實例
有了類的實例之後
接下來就可以調用它的方法
設置它的屬性
在上面的例子中
我們調用了EmployeeForm類的Show方法
四localhost與的區別 當我們指定的URL是//localhost
形式時
前面兩節介紹的辦法都不會出現問題
但是
如果我們改用形式的URL
就會遇到問題
例如
如果用這個URL來打開loader
exe
就會看到類似圖
的錯誤信息
圖用訪問時出現的錯誤 系統的配置不同
具體的錯誤信息也不同
但不管錯誤信息到底是什麼
用總是可以看到與安全有關的錯誤信息
當我們通過一個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