七部署NET安全策略
在前面一节中我们创建了一个安全策略信任来自的代码在实际应用中还存在这样一个问题即我们应当方便用户不能要求每一个用户按照同样的步骤设置安全策略
解决办法很简单设置好安全策略之后我们还可以将安全策略分发给用户用户只需一次点击就可以完成全部设置
首先我们要创建一个部署包它将通过Windows安装文件(MSI)文件把安全策略安装到用户的机器上操作方法是右击运行库安全策略选择创建部署包如图
图创建一个部署包部署包的安全策略级别分三种企业计算机用户本例中我们创建一个计算机策略的部署包如图注意部署包的扩展名是MSI
图设置要部署的安全策略为计算机策略创建好部署包之后可以将它分发给用户只要双击运行msi文件Windows安装程序就会自动安装msi文件中定义的安全策略另外网络管理员还可以通过适当的配置将配置安全策略的部署包自动发布给每一个用户
八深入理解AssemblyLoadFrom
现在我们来看看用AssemblyLoadFrom从远程服务器下载一个程序集时背后发生的事情以下面的代码为例
指定URL
Dim URL As String
URL = _
从指定的URL装入程序集
Dim a As [Assembly]
a = [Assembly]LoadFrom(URL)
当NET执行LoadFrom方法时它访//localhost/CodeDownloadDemo寻找Web服务器上的ModuleAdll程序集在此过程中NET会检查以前是否下载过该程序集如果从来没有下载过NET就下载该程序集并把它保存到NET程序集下载缓沖区
第二次运行同样的代码时NET知道该程序集以前已经下载过一次如果Web服务器上程序集的版本和本地程序集下载缓沖区中的版本一样NET就使用已经下载到磁盘上的程序集
假设我们现在第三次运行上述代码NET检测到Web服务器上程序集的版本要比本地缓沖的版本新这时NET就会重新下载新版的程序集把它保存到程序集下载缓沖区并运行它程序集下载缓沖区是位于\windows\assembly\download的一个特殊文件夹
必须指出的是在比较程序集的本地版本和远程版本哪一个更新时NET的判断依据是程序集的时间标记而不是程序集的版本号这一点很重要特别地如果有多个程序员协同开发和编译程序集应当注意计算机的时间设置问题
九当Web服务器不可用时
如果执行AssemblyLoadFrom时//localhost/CodeDownLoadDemo/的Web服务器不可用例如用户的Internet连接出了故障或者用户正在旅途中使用笔记本这时应该怎么办?在这种情况下LoadFrom执行失败用户不能从远程服务器上的程序集装入类
有一种解决办法虽然不那么完美但确实行得通即用户只要把浏览器设置成脱机工作模式就可以了如此设置之后AssemblyLoadFrom就自动知道它应该使用程序集的下载缓沖区
十结束语
上面介绍的所有技术都有一个限制即如果要让自动部署技术能够在用户的机器上正常发挥所有机器必须安装NET框架虽然NET框架是免费的但不一定每一个用户都会去安装它如果应用程序一定要求用户下载和安装 MB的NET框架用户对应用程序的印象可能会受到影响
越来越多的新计算机会预先装好NET框架所以该问题的影响应该越来越小目前临时的解决办法是用Install Shield或Wise Installer之类的工具创建一个典型配置的NET框架安装包实现NET框架自动安装
NET自动部署是一种非常强大的技术它能够有效地减少部署胖客户端程序过程中面临的问题充分运用NET自动部署技术我们可以保证用户总是使用最新版本的代码却不必要求用户频繁地去访问某个网站下载更新软件
NET自动部署技术一项很重要的特性是安全它使得用户既可以从指定的远程地点下载程序同时有效地保障用户不会意外地运行来源不明的代码