.NET Framework中的无接触部署

[来源] 达内    [编辑] 达内   [时间]2013-03-08

.NET Framework中的无接触部署

  代码访问安全性是保护桌面免受正在通过无接触部署方式下载的 Windows 窗体应用程序影响的关键。此模型通过匹配应用程序和应该分配给应用程序的权限来工作。在运行时,公共语言运行时从程序集中收集凭证。凭证可以采 用代码源自的 Internet Explorer 区域(本地磁盘、Intranet、Internet、受信任站点或不受信任站点)的形式,也可采用代码源自的 URL(签名使用的私钥、哈希值、Authenticode 发布服务器签名等等)的形式。使用此凭证,公共语言运行时将程序集分配给相应的代码组或类别。每个代码组都拥有分配给它的权限集,说明程序集应获得的权限,例如能否读取或写入本地磁盘、访问联网资源、打印以及访问环境变量等等。

  默认情况下,.NET Framework 附带围绕 Internet Explorer 区域设置的代码组。例如,来自 Intranet 区域的代码获得的权限很有限,因此无法执行文件 IO 访问。

  为了说明安全检查在起作用,任务管理可执行程序包含一个名为 Read Boot.ini 的工具栏按钮,该按钮尝试访问 C:\ 盘中的文件。

  您可以进行一个简单的测试,单击"Read Boot.ini"按钮,查看当应用程序请求 C:\ 根目录中的文件时会发生什么情况 - 引发安全异常,应用程序不处理该请求。

  异常返回一个文件 IO 权限异常,说明应用程序无法访问 TaskManagement.exe 请求的特定资源。

  使用多程序集应用程序的无接触部署

  在本示例应用程序中,我们已经说明了如何加载单个程序集。通过对 Assemble 对象使用 LoadFrom() 方法,.NET Framework 还可以有效地将多程序集应用程序传入客户端。

  Assemble 类具有 LoadFrom 方法,可以初始化一个对特定程序集的引用。LoadFrom 的参数是 URL 或文件路径名。指定 URL 后,.NET Framework 首先通过检查程序集下载缓存,检查客户端是否存在已命名的程序集。如果程序集不在程序集下载缓存中,.NET Framework 将从 Web 服务器获取该程序集,并将它的副本置于下载缓存中。这样,程序集对象即可在代码中使用。

  例如,如果在一个单独的名为 AboutForm.dll 的程序集中实现了 TaskManagement About Windows 窗体,则可以在用户请求查看"About"(关于)对话框时使用 LoadFrom 下载该程序集。这样,当用户与应用程序交互时,我们只需传输应用程序所需的代码。

  无接触部署和 XML Web Service

  一个重要的安全限制是,当通过 Web 服务器分发应用程序时,其域必须与它所依赖的所有 Web 服务相匹配。例如,如果从 myserver/TaskManagement.exe 启动 TaskManagement.exe,则只允许使用myserver 上的 XML Web Service.出于安全性方面的考虑,不允许应用程序从其他服务器调用 Web 服务。

资源下载