共用方式為


使用 Internet Explorer 部署執行階段應用程式

更新:2007 年 11 月

Web 架構應用程式可以使用 Microsoft Internet Explorer 5.5 (含) 以後版本來下載並執行組件。Web 架構應用程式可以下載二種標準可攜式可執行檔 (PE) - .exe 或 .dll。HTML 文件可以提供要下載哪個組件、組件位置和組態檔位置 (可提供額外資訊) 的資訊。

使用 Internet Explorer 部署應用程式的優點是需要使用時才下載組件。如果應用程式是由多個組件所組成,則只下載參考到的組件。由於不必下載整個應用程式,用戶端只接收要用的程式碼,這個自動處理序因而可以加快應用程式的初始下載。

注意事項:

從網際網路部署的程式碼通常都有由安全性原則設定的預設網際網路使用權限。這些使用權限能讓程式碼只執行有限的函式集合。如需預設網際網路安全性原則的詳細資訊,請參閱安全性原則

Web 架構應用程式設定

預設情況下,Common Language Runtime 替每一個使用 Internet Explorer 存取的網站建立應用程式定義域。應用程式定義域隔離執行於一個處理序 (Process) 內的不同應用程式。應用程式定義域被建立的方式會影響組件在網域中執行時所擁有的使用權限。每一個應用程式定義域都與 URL 辨識項 (Evidence) 和應用程式基底有關聯,有時甚至還具有組態檔。

URL 辨識項

使用 Microsoft Internet Explorer 5.5 (含) 以後版本部署的應用程式,都會指派 URL 辨識項。Runtime 主機根據安全性原則,使用這個 URL 辨識項來製作決策。雖然 URL 辨識項與組成應用程式的組件和應用程式建立的應用程式定義域有關聯,但是二者的辨識項格式並不相同。組件的 URL 辨識項是主要組件檔的完整 URL 路徑。例如,應用程式中組件的 URL 辨識項可能是 http://www.code.microsoft.com/myApp/myAssembly.dll。應用程式定義域的 URL 辨識項,與站台辨識項相同。前例應用程式定義域的 URL 辨識項可能是 http://www.code.microsoft.com/。

注意事項:

應用程式組態檔的位置不會影響應用程式定義域的 URL 辨識項。

組態檔

使用 Internet Explorer 部署的 Web 應用程式,可以使用應用程式組態檔中儲存的資訊。應用程式組態檔必須在 Web 伺服器上的應用程式可執行檔目錄中。應用程式組態檔必須遵循應用程式組態檔的命名規則。檔案必須與可執行檔同名,副檔名為 .config。例如,應用程式 myApplication.exe 的應用程式組態檔名稱應該是 myApplication.exe.config。

ASP.NET 應用程式使用 Web.config 檔案指定組態資訊。Web 應用程式可以提供組態資訊,正如 ASP.NET 和可執行主應用程式所做的;如果裝載於 Internet Explorer 的應用程式具有組態檔,組態檔的位置將以下列語法在 <link> 標記中指定:

<LINK REL="CONFIGURATION" HREF="[configuration file name]"></LINK>

在這個範例中,[configuration file name] 是組態檔的名稱,例如:

<LINK REL="CONFIGURATION" HREF="two.dll.config"></LINK>

對於基本 Web 應用程式案例 (Web 網頁不會在其中提供 <link> 標記給組態檔),Runtime 會以每一站台為基準,建立應用程式定義域。也就是,如果 HTML 文件位在 http://www.code.microsoft.com/myApp/mypage.htm,應用程式定義域則是建立在整個網站 http://www.code.microsoft.com 之上。注意,雖然案例對 Web 作者很便利,在這個站台上使用 Managed 程式碼組件的所有 Web 網頁,將會因為沒有組態檔被指定而共用相同應用程式定義域。

如果應用程式讀取應用程式組態檔資訊,您必須:

  • 將組態檔放在可執行檔的位置上

  • 允許匿名存取網站,而且組態檔所在目錄必須允許執行指令碼

在更複雜的案例中,可能需要兩個或更多不同但彼此隔離的應用程式在相同站台上執行。若要達成這樣的隔離,Web 網頁作者必須在 HTML 文件中指定組態檔。所有指向相同組態檔的網頁都在相同應用程式定義域中建立。這樣,按每一組態檔的基準來建立應用程式定義域,是可行的。

注意事項:

當 <link> 標記包含相對路徑時,Runtime 不會在指向組態檔的 URL 中支援 '#' 字元。

應用程式基底

ApplicationBase 是應用程式定義域屬性,指定執行階段搜尋組件時充當根目錄的目錄。預設 ApplicationBase 屬性為站台根目錄 (例如,wwwroot)。如果出現應用程式組態檔,ApplicationBase 就成為組態檔的位置。組態檔可以包含專屬在應用程式定義域中執行的程式碼的組態資訊。如果電腦上定義了多個站台,ApplicationBase 會預設為連接埠 80 上定義的「預設」站台。

下載 Managed 可執行檔

當大部分使用 <object> 標記下載的應用程式是出現在 Web 網頁上的 UI 控制項時,Runtime 也支援兩個供下載 Managed 可執行檔的案例:

  • 使用者輸入 Managed .exe 檔案的 URL 至瀏覽器;例如:

    http://www.server.microsoft.com/MyWebSite/MyApp.exe.
    
  • HTML 網頁包含對 Managed 可執行檔的連結;例如:

    HREF="MyApp.exe".
    

兩個案例中,Runtime 都建立新的應用程式定義域以便在其中執行可執行檔。對於組件的後續要求,應用程式基底即設定為可執行檔的位置。

例如,下列程式碼參考 myClass:

<object id="myCtl" 
  classid="http://www.mycode.Microsoft.com/mycode.dll#myClass"> 
</object>

當呼叫組件是使用 <object> 標記指定時,靜態連結的相依組件必須位於與呼叫組件相同的目錄中。例如,如果組件 myAssembly.dll 是使用 <object> 標記指定,並且具有 myOtherAssembly.dll 的靜態參考,則 myOtherAssembly.dll 必須位於與 myAssembly.dll 相同的目錄中。

注意事項:

由 Internet Explorer 使用 HREF 連結部署的 Managed 程式碼可執行檔不可以命令列引數開始。引數無法順利傳送至可執行檔。

錯誤報告

程式碼下載處理序會使用下列兩種登錄設定,從使用 Internet Explorer 部署的 Managed 程式碼可執行檔控制錯誤報告。

  • HKLM\Software\Microsoft\.NETFramework\ExposeExceptionsInCOM

  • HKCU\Software\Microsoft\.NETFramework\ExposeExceptionsInCOM

這兩種設定都使用下列值,指定報告錯誤的方式。

描述

1

錯誤資訊是傳送至標準的輸出資料流

2

錯誤資訊是顯示供使用者參考

3

錯誤資訊是同時傳送至標準的輸出資料流,也顯示供使用者參考

為使用 Internet Explorer 部署的 Managed 程式碼進行偵錯時,可以使用這些設定的值,找出有關程式碼下載失敗的詳細資訊。例如,可以讓您在擲回例外狀況時檢視堆疊追蹤資訊,而不必依賴 Internet Explorer 所提供的錯誤報告,這種錯誤報告是為使用者設計,而不是為開發人員設計的。

Internet Explorer 中裝載的控制項

您可以使用 Internet Explorer 來裝載以 .NET Framework 建立的控制項。控制項必須在副檔名為 .dll 的程式庫中。程式庫的副檔名必須是 .dll,Windows Form 控制項才能同時做為獨立控制項和裝載在 Internet Explorer 中的控制項。

重要事項:

Internet Explorer 裝載的所有 Managed 控制項,使用電腦上安裝的最新版 Common Language Runtime。這表示在某些情況下,面對用來建置控制項的版本,該控制項可能不會執行,而且控制項在原來想要使用的相同安全性原則下也可能不會執行。在新版本的 Common Language Runtime 下執行 Managed 控制項之前,必須先針對新的執行階段版本來更新安全性原則。這在任何安全性地區皆然,但不適用於下載的 Managed 可執行檔。

注意事項:

載入 Managed 控制項時,<object> 項目之 classid 屬性值的最大長度是 256 個字元 (MAX_PATH)。如果其長度超過最大長度,控制項不會載入,但並不會產生錯誤。例如,下列 classid 屬性值是可接受的長度:

<object id="myCtl" classid="http://www.example.com/mycode.dll#myClass">

注意事項:

基於安全性考量,不支援使用 <object> 標記的 Managed 控制項和 HTML 網頁中的檔案存取通訊協定。例如,不支援下列 <object> 標記:

<OBJECT classid="file:///c:/control.dll#control">

找出相依組件

Runtime 用以找出 Web 架構應用程式相依組件的程序類似它對非 Web 架構應用程式所用的程序。Runtime 使用 ApplicationBase 相關的路徑來搜尋私用相依組件。Runtime 結合使用 ApplicationBase、組態檔中的 <private_binpath> 標記和搜尋規則,找出私用組件。Runtime 也檢查呼叫組件所位在的 URL 來檢查相依組件。

使用 Microsoft Authenticode 簽章簽名 Managed 程式碼

您可以使用檔案簽名工具 (Signcode.exe),以 Authenticode 數位簽章來簽名檔案。請注意,如果您同時想以強式名稱 (Strong Name) 和 Authenticode 數位簽章來簽名檔案,就必須先指定強式名稱。先指定 Authenticode 簽章,會中斷強式名稱。如需檔案簽名的詳細資訊,請參閱組件安全性考量。如需使用 Visual Studio 2005 為檔案簽名的詳細資訊,請參閱 Visual Studio 2005 文件中的<部署和 Authenticode 簽署>。如需 Authenticode 簽名技術的詳細資訊,請參閱 Platform SDK 文件中的<程式碼簽名簡介>。

請參閱

概念

.NET Framework 應用程式的部署案例

組件安全性考量

執行階段如何找出組件

參考

檔案簽署工具 (Signcode.exe)