本文引用自微軟網(wǎng)站:http://msdn2.microsoft.com/zh-cn/library/a7as3z1d(VS.80).aspx
使用 Internet Explorer 部署運(yùn)行庫(kù)應(yīng)用程序
基于 Web 的應(yīng)用程序可以使用 Microsoft Internet Explorer 5.5 或更高版本下載和運(yùn)行程序集。基于 Web 的應(yīng)用程序可以下載兩種標(biāo)準(zhǔn)的可移植可執(zhí)行 (PE) 文件:.exe 或 .dll。HTML 文檔可以提供以下幾個(gè)方面的信息:要下載的程序集、程序集的位置以及配置文件(可提供附加信息)的位置。
使用 Internet Explorer 部署應(yīng)用程序的好處在于:只是在使用程序集時(shí)才下載程序集。如果應(yīng)用程序包含多個(gè)程序集,則只有在引用程序集時(shí)才會(huì)下載程序集。由于不必下載整個(gè)應(yīng)用程序,并且客戶端只接收它要使用的代碼,因此這個(gè)自動(dòng)過程加快了應(yīng)用程序的初始下載速度。
注意
從 Internet 部署的代碼通常會(huì)根據(jù)安全策略具有默認(rèn)的 Internet 權(quán)限集。這些權(quán)限允許代碼只執(zhí)行一組有限的功能。有關(guān)默認(rèn) Internet 安全策略的更多信息,請(qǐng)參見安全策略。
基于 Web 的應(yīng)用程序設(shè)置
默認(rèn)情況下,公共語(yǔ)言運(yùn)行庫(kù)給每個(gè)使用 Internet Explorer 訪問的站點(diǎn)創(chuàng)建一個(gè)應(yīng)用程序域。應(yīng)用程序域?qū)⒃谝粋€(gè)過程中運(yùn)行的單獨(dú)的應(yīng)用程序隔離開來。應(yīng)用程序域的創(chuàng)建方式影響程序集在該域中運(yùn)行時(shí)具有的權(quán)限。每個(gè)應(yīng)用程序域都與 URL 證據(jù)和應(yīng)用程序基相關(guān)聯(lián),并且還可能擁有配置文件。
URL 證據(jù)
URL 證據(jù)分配給使用 Microsoft Internet Explorer 5.5 或更高版本所部署的應(yīng)用程序。運(yùn)行庫(kù)主機(jī)使用此 URL 證據(jù)基于安全策略制定決策。雖然 URL 證據(jù)同時(shí)與組成應(yīng)用程序的程序集和應(yīng)用程序創(chuàng)建的應(yīng)用程序域相關(guān)聯(lián),但在這兩種情況下,證據(jù)的格式是不同的。對(duì)于程序集,URL 證據(jù)是主程序集文件的完整 URL 路徑。例如,作為應(yīng)用程序組成部分的程序集可具有 http://www.code.microsoft.com/myApp/myAssembly.dll 的 URL 證據(jù)。應(yīng)用程序域的 URL 證據(jù)等同于站點(diǎn)證據(jù)。在前面的示例中,應(yīng)用程序域的 URL 證據(jù)將為 http://www.code.microsoft.com/。
注意
應(yīng)用程序配置文件的位置不會(huì)影響應(yīng)用程序域的 URL 證據(jù)。
配置文件
使用 Internet Explorer 部署的 Web 應(yīng)用程序可以使用存儲(chǔ)在應(yīng)用程序配置文件中的信息。應(yīng)用程序配置文件必須與應(yīng)用程序可執(zhí)行文件位于 Web 服務(wù)器上的相同目錄中。應(yīng)用程序配置文件必須遵循應(yīng)用程序配置文件的命名規(guī)則。該文件必須與可執(zhí)行文件同名,并且文件名后追加擴(kuò)展名 .config。例如,名為 myapplication.exe 的應(yīng)用程序?qū)碛幸粋€(gè)名為 myApplication.exe.config 的應(yīng)用程序配置文件。
asp.net 應(yīng)用程序使用 Web.config 文件指定配置信息。Web 應(yīng)用程序可以提供配置信息,這一點(diǎn)與 ASP.NET 和可執(zhí)行文件宿主是相同的。如果在 Internet Explorer 中寄宿的應(yīng)用程序具有配置文件,則使用 <link> 標(biāo)記和以下語(yǔ)法指定配置文件的位置:
復(fù)制代碼
<LINK REL="CONFIGURATION" HREF="[configuration file name]"></LINK>在此示例中,[configuration file name] 是配置文件的名稱,例如:
復(fù)制代碼
<LINK REL="CONFIGURATION" HREF="two.dll.config"></LINK>對(duì)于基本的 Web 應(yīng)用程序方案(網(wǎng)頁(yè)不提供指向配置文件的 <link> 標(biāo)記)而言,運(yùn)行庫(kù)基于每個(gè)站點(diǎn)來創(chuàng)建應(yīng)用程序域。即,如果 HTML 文檔位于 http://www.code.microsoft.com/myApp/mypage.htm,則創(chuàng)建的應(yīng)用程序域包含整個(gè) http://www.code.microsoft.com 站點(diǎn)。請(qǐng)注意,盡管對(duì) Web 作者而言這種方案是很方便的,但是由于未指定配置文件,所以使用該站點(diǎn)上托管代碼程序集的所有網(wǎng)頁(yè)共享同一個(gè)應(yīng)用程序域。
如果應(yīng)用程序從應(yīng)用程序配置文件讀取信息,您必須執(zhí)行以下操作:
將配置文件與可執(zhí)行文件置于相同位置。
允許匿名訪問網(wǎng)站,并且包含配置文件的目錄必須允許執(zhí)行腳本。
在更復(fù)雜的方案中,可能需要在同一站點(diǎn)上運(yùn)行兩個(gè)或多個(gè)不同的應(yīng)用程序,并且要彼此隔離。若要實(shí)現(xiàn)這種隔離,網(wǎng)頁(yè)作者必須在 HTML 文檔中指定一個(gè)配置文件。所有指向同一配置文件的頁(yè)在同一應(yīng)用程序域中創(chuàng)建。這樣,就可以基于每個(gè)配置文件創(chuàng)建應(yīng)用程序域。
注意
當(dāng) <link> 標(biāo)記中包含相對(duì)路徑時(shí),運(yùn)行庫(kù)不支持在指向配置文件的 URL 中使用字符“#”。
應(yīng)用程序基
ApplicationBase 是一個(gè)應(yīng)用程序域?qū)傩裕搶傩灾付ㄟ\(yùn)行庫(kù)搜索程序集時(shí)用作根目錄的目錄。默認(rèn)情況下,將 ApplicationBase 屬性假定為站點(diǎn)的根(例如,wwwroot)。如果存在應(yīng)用程序配置文件,則 ApplicationBase 會(huì)成為該配置文件的位置。配置文件可包含特定于應(yīng)用程序域中運(yùn)行的代碼的配置信息。如果您的計(jì)算機(jī)上定義了多個(gè)站點(diǎn),則 ApplicationBase 默認(rèn)為在端口 80 上定義的“默認(rèn)”站點(diǎn)。
下載托管可執(zhí)行文件
雖然使用 <object> 標(biāo)記下載的大多數(shù)應(yīng)用程序是在網(wǎng)頁(yè)上出現(xiàn)的 UI 控件,但是運(yùn)行庫(kù)還支持兩種用于下載托管可執(zhí)行文件的方案:
用戶在瀏覽器中鍵入托管 .exe 文件的 URL;例如:
復(fù)制代碼
http://www.server.microsoft.com/MyWebSite/MyApp.exe.HTML 頁(yè)包含指向托管可執(zhí)行文件的鏈接;例如:
復(fù)制代碼
HREF="MyApp.exe".在這兩種方案中,運(yùn)行庫(kù)創(chuàng)建一個(gè)在其中運(yùn)行此可執(zhí)行文件的新應(yīng)用程序域。對(duì)于后續(xù)的程序集請(qǐng)求,將應(yīng)用程序基設(shè)置為此可執(zhí)行文件的位置。
例如,以下代碼引用 myClass:
復(fù)制代碼
<object id="myCtl"
classid="</object>當(dāng)使用 <object> 標(biāo)記指定調(diào)用程序集時(shí),靜態(tài)鏈接的依賴程序集必須與調(diào)用程序集位于同一目錄。例如,如果程序集 myAssembly.dll 是使用 <object> 標(biāo)記指定的,并且具有對(duì) myOtherAssembly.dll 的靜態(tài)引用,則 myOtherAssembly.dll 必定可以在 myAssembly.dll 所在的同一目錄下找到。
注意
由 Internet Explorer 使用 HREF 鏈接所部署的托管代碼可執(zhí)行文件不應(yīng)該使用命令行參數(shù)啟動(dòng)。參數(shù)無(wú)法成功地傳遞到可執(zhí)行文件。
錯(cuò)誤報(bào)告
代碼下載進(jìn)程使用以下兩個(gè)注冊(cè)表設(shè)置來控制錯(cuò)誤報(bào)告,該錯(cuò)誤報(bào)告來自使用 Internet Explorer 部署的托管代碼可執(zhí)行文件。
HKLM/Software/Microsoft/.NETFramework/ExposeExceptionsInCOM
HKCU/Software/Microsoft/.NETFramework/ExposeExceptionsInCOM
兩個(gè)設(shè)置都使用了以下值來指定如何報(bào)告錯(cuò)誤。
值 說明
1
將錯(cuò)誤信息發(fā)送到標(biāo)準(zhǔn)的輸出流。
2
將錯(cuò)誤信息顯示到用戶。
3
將錯(cuò)誤信息發(fā)送到標(biāo)準(zhǔn)的輸出流并顯示到用戶。
當(dāng)您調(diào)試使用 Internet Explorer 部署的托管代碼時(shí),若要查找關(guān)于代碼下載失敗的詳細(xì)信息,可使用這些設(shè)置的值。例如,這些設(shè)置允許您在引發(fā)異常時(shí)查看堆棧跟蹤信息,而不依賴于由 Internet Explorer 提供的錯(cuò)誤報(bào)告,這些錯(cuò)誤報(bào)告是為最終用戶而不是開發(fā)人員設(shè)計(jì)的。
寄宿在 Internet Explorer 中的控件
您可以使用 Internet Explorer 承載使用 .NET Framework 創(chuàng)建的宿主控件。控件必須包含在擴(kuò)展名為 .dll 的庫(kù)中。要將同一“Windows 窗體”控件同時(shí)用作獨(dú)立控件和寄宿在 Internet Explorer 中的控件,庫(kù)必須使用 .dll 擴(kuò)展名,這樣才能在這兩種情況下都有效。
要點(diǎn)
Internet Explorer 承載的所有托管控件都使用計(jì)算機(jī)上安裝的最新版本的公共語(yǔ)言運(yùn)行庫(kù)。這意味著在某些情況下,控件可能不針對(duì)生成它的版本運(yùn)行,控件也可能不在最初預(yù)計(jì)的安全策略下運(yùn)行。在新版本的公共語(yǔ)言運(yùn)行庫(kù)下運(yùn)行托管控件之前,必須針為新的運(yùn)行庫(kù)版本更新安全策略。這一點(diǎn)適用于任何安全區(qū)域,但是不適用于所下載的托管可執(zhí)行文件。
注意
當(dāng)加載托管控件時(shí),<object> 元素的 classid 屬性的值的最大長(zhǎng)度為 256 個(gè)字符 (MAX_PATH)。如果長(zhǎng)度大于最大值,無(wú)法加載控件但也不會(huì)生成錯(cuò)誤。例如,下面的 classid 屬性值的長(zhǎng)度是可以接受的:
注意
為安全起見,不支持 HTML 頁(yè)中的使用 <object> 標(biāo)記和文件訪問協(xié)議的托管控件。例如,不支持下面的 <object> 標(biāo)記:
<OBJECT classid="file:///c:/control.dll#control">
定位依賴程序集
對(duì)于基于 Web 的應(yīng)用程序和非基于 Web 的應(yīng)用程序,運(yùn)行庫(kù)定位其依賴程序集使用的過程是類似的。運(yùn)行庫(kù)使用 ApplicationBase 的相對(duì)路徑搜索專用依賴程序集。運(yùn)行庫(kù)使用 ApplicationBase、配置文件中的 <PRivate_binpath> 標(biāo)記和搜索規(guī)則的組合來定位專用程序集。運(yùn)行庫(kù)還檢查調(diào)用程序集所在的 URL,來檢查依賴程序集。
使用 Microsoft Authenticode 簽名給托管代碼簽名
您可以使用文件簽名工具 (Signcode.exe) 為文件附加 Authenticode 數(shù)字簽名。請(qǐng)注意,如果您要使用強(qiáng)名稱和 Authenticode 數(shù)字簽名為文件簽名,則必須先指定強(qiáng)名稱。先指定 Authenticode 簽名會(huì)破壞強(qiáng)名稱。有關(guān)文件簽名的更多信息,請(qǐng)參見程序集安全注意事項(xiàng)。有關(guān)使用 Visual Studio 2005 進(jìn)行文件簽名的信息,請(qǐng)參見 Visual Studio 2005 文檔中的“部署和 Authenticode 簽名”。有關(guān) Authenticode 簽名技術(shù)的更多信息,請(qǐng)參見 Platform SDK 文檔中的“代碼簽名簡(jiǎn)介”。
請(qǐng)參見
參考
文件簽名工具 (Signcode.exe)
概念
.NET Framework 應(yīng)用程序的部署方案
程序集安全注意事項(xiàng)
運(yùn)行庫(kù)如何定位程序集
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注