使用 Internet Explorer 部署运行库应用程序
更新:2007 年 11 月
基于 Web 的应用程序可以使用 Microsoft Internet Explorer 5.5 或更高版本下载和运行程序集。基于 Web 的应用程序可以下载两种标准的可移植可执行 (PE) 文件:.exe 或 .dll。HTML 文档可以提供以下几个方面的信息:要下载的程序集、程序集的位置以及配置文件(可提供附加信息)的位置。
使用 Internet Explorer 部署应用程序的好处在于:只是在使用程序集时才下载程序集。如果应用程序包含多个程序集,则只有在引用程序集时才会下载程序集。由于不必下载整个应用程序,并且客户端只接收它要使用的代码,因此这个自动过程加快了应用程序的初始下载速度。
说明: |
---|
从 Internet 部署的代码通常会根据安全策略具有默认的 Internet 权限集。这些权限允许代码只执行一组有限的功能。有关默认 Internet 安全策略的更多信息,请参见安全策略。 |
基于 Web 的应用程序设置
默认情况下,公共语言运行库给每个使用 Internet Explorer 访问的站点创建一个应用程序域。应用程序域将在一个过程中运行的单独的应用程序隔离开来。应用程序域的创建方式影响程序集在该域中运行时具有的权限。每个应用程序域都与 URL 证据和应用程序基目录相关联,并且还可能拥有配置文件。
URL 证据
URL 证据分配给使用 Microsoft Internet Explorer 5.5 或更高版本所部署的应用程序。运行库主机使用此 URL 证据基于安全策略制定决策。虽然 URL 证据同时与组成应用程序的程序集和应用程序创建的应用程序域相关联,但在这两种情况下,证据的格式是不同的。对于程序集,URL 证据是主程序集文件的完整 URL 路径。例如,作为应用程序组成部分的程序集可具有 http://www.code.microsoft.com/myApp/myAssembly.dll 的 URL 证据。应用程序域的 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 应用程序方案(网页不提供指向配置文件的 <link> 标记)而言,运行库基于每个站点来创建应用程序域。即,如果 HTML 文档位于 http://www.code.microsoft.com/myApp/mypage.htm,则创建的应用程序域包含整个 http://www.code.microsoft.com 站点。请注意,尽管对 Web 作者而言这种方案是很方便的,但是由于未指定配置文件,所以使用该站点上托管代码程序集的所有网页共享同一个应用程序域。
如果应用程序从应用程序配置文件读取信息,您必须执行以下操作:
将配置文件与可执行文件置于相同位置。
允许匿名访问网站,并且包含配置文件的目录必须允许执行脚本。
在更复杂的方案中,可能需要在同一站点上运行两个或多个不同的应用程序,并且要彼此隔离。若要实现这种隔离,网页作者必须在 HTML 文档中指定一个配置文件。所有指向同一配置文件的页在同一应用程序域中创建。这样,就可以基于每个配置文件创建应用程序域。
说明: |
---|
当 <link> 标记中包含相对路径时,运行库不支持在指向配置文件的 URL 中使用字符“#”。 |
应用程序基目录
ApplicationBase 是一个应用程序域属性,该属性指定运行库搜索程序集时用作根目录的目录。默认情况下,将 ApplicationBase 属性假定为站点的根(例如,wwwroot)。如果存在应用程序配置文件,则 ApplicationBase 会成为该配置文件的位置。配置文件可包含特定于应用程序域中运行的代码的配置信息。如果您的计算机上定义了多个站点,则 ApplicationBase 默认为在端口 80 上定义的“默认”站点。
下载托管可执行文件
虽然使用 <object> 标记下载的大多数应用程序是在网页上出现的 UI 控件,但是运行库还支持两种用于下载托管可执行文件的方案:
用户在浏览器中键入托管 .exe 文件的 URL;例如:
http://www.server.microsoft.com/MyWebSite/MyApp.exe.
HTML 页包含指向托管可执行文件的链接;例如:
HREF="MyApp.exe".
在这两种方案中,运行库创建一个在其中运行此可执行文件的新应用程序域。对于后续的程序集请求,将应用程序基目录设置为此可执行文件的位置。
例如,以下代码引用 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 链接所部署的托管代码可执行文件不应该使用命令行参数启动。参数无法成功地传递到可执行文件。 |
错误报告
代码下载进程使用以下两个注册表设置来控制错误报告,该错误报告来自使用 Internet Explorer 部署的托管代码可执行文件。
HKLM\Software\Microsoft\.NETFramework\ExposeExceptionsInCOM
HKCU\Software\Microsoft\.NETFramework\ExposeExceptionsInCOM
两个设置都使用了以下值来指定如何报告错误。
值 |
说明 |
---|---|
1 |
将错误信息发送到标准的输出流。 |
2 |
将错误信息显示到用户。 |
3 |
将错误信息发送到标准的输出流并显示到用户。 |
当您调试使用 Internet Explorer 部署的托管代码时,若要查找关于代码下载失败的详细信息,可使用这些设置的值。例如,这些设置允许您在引发异常时查看堆栈跟踪信息,而不依赖于由 Internet Explorer 提供的错误报告,这些错误报告是为最终用户而不是开发人员设计的。
寄宿在 Internet Explorer 中的控件
您可以使用 Internet Explorer 承载使用 .NET Framework 创建的宿主控件。控件必须包含在扩展名为 .dll 的库中。要将同一“Windows 窗体”控件同时用作独立控件和寄宿在 Internet Explorer 中的控件,库必须使用 .dll 扩展名,这样才能在这两种情况下都有效。
重要说明: |
---|
Internet Explorer 承载的所有托管控件都使用计算机上安装的最新版本的公共语言运行库。这意味着在某些情况下,控件可能不针对生成它的版本运行,控件也可能不在最初预计的安全策略下运行。在新版本的公共语言运行库下运行托管控件之前,必须针为新的运行库版本更新安全策略。这一点适用于任何安全区域,但是不适用于所下载的托管可执行文件。 |
说明: |
---|
当加载托管控件时,<object> 元素的 classid 属性的值的最大长度为 256 个字符 (MAX_PATH)。如果长度大于最大值,无法加载控件但也不会生成错误。例如,下面的 classid 属性值的长度是可以接受的: <object id="myCtl" classid="http://www.example.com/mycode.dll#myClass"> |
说明: |
---|
为安全起见,不支持 HTML 页中的使用 <object> 标记和文件访问协议的托管控件。例如,不支持下面的 <object> 标记: <OBJECT classid="file:///c:/control.dll#control"> |
定位依赖程序集
对于基于 Web 的应用程序和非基于 Web 的应用程序,运行库定位其依赖程序集使用的过程是类似的。运行库使用 ApplicationBase 的相对路径搜索专用依赖程序集。运行库使用 ApplicationBase、配置文件中的 <private_binpath> 标记和搜索规则的组合来定位专用程序集。运行库还检查调用程序集所在的 URL,来检查依赖程序集。
使用 Microsoft Authenticode 签名给托管代码签名
您可以使用文件签名工具 (Signcode.exe) 为文件附加 Authenticode 数字签名。请注意,如果您要使用强名称和 Authenticode 数字签名为文件签名,则必须先指定强名称。先指定 Authenticode 签名会破坏强名称。有关文件签名的更多信息,请参见程序集安全注意事项。有关使用 Visual Studio 2005 进行文件签名的信息,请参见 Visual Studio 2005 文档中的“部署和 Authenticode 签名”。有关 Authenticode 签名技术的更多信息,请参见 Platform SDK 文档中的“代码签名简介”。