实现.NET应用程序的自动更新(4)

2008-02-22 09:33:19来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  为解决这个问题,.NET应用程序更新组件使用给.NET程序集添加强名称的特性来验证所下载的程序集。如果.NET应用程序更新组件检测到下载期间一个程序集不是使用你的密钥签名的,下载就会取消。这意味着只有拥有你的应用程序私钥的人才能够建立可自动部署的更新文件。

  要验证程序集有效,.NET应用程序更新组件验证你当前安装的应用程序可执行程序的公钥和下载的更新的公钥是否匹配。如果两个程序集以相同且保密的私钥签名,那么嵌入的公钥也就相同。因为被CLR加载的程序集为了验证它的公钥,CLR计算它正常的哈希值检查来保证程序集实际上就是真正的程序集而不是被做了手脚的程序集。为了能够在下载时验证,可以给你所有的应用程序集添加强名称并将.NET应用程序更新组件的ValidateAssemblies属性设置为true。

  在下载时进行程序集验证会起很大的作用,但实际上,应用程序会经常有不同私钥签名的组件。比如,你的应用程序可能有两个文件:使用你的私钥签名的可执行程序集和另一个包含你购买的应用在你的应用程序中的第三方图表控件的dll程序集。第三方程序集可能使
用第三方而不是你自己的私钥来签名。使情况变得更为复杂的是,在你的应用程序中用来签名程序集的有效私钥的设置随着版本号的改变可能会发生变化。你该如何自动更新那些应用的类型?为解决这个问题,你可以在你的应用程序中生成一个包含有效公钥的列表的程序集。将该程序集使用应用程序的主私钥(应用程序的exe文件签名的密钥)签名并把该程序集放到Web服务器上和应用程序更新文件一起的目录下。在更新下载过程开始之前,.NET应用程序更新组件将会检查Web服务器上应用程序更新目录下一个名为"AppUpdaterKeys.dll"的的程序集。如果存在,该程序集就会被下载。该程序集会被拿来和主应用程序的公钥对比验证。如果签名有效,密钥列表会被提取出来。从此之后,任何处于该列表中的密钥会被认为是更新文件的有效签名。

  有关安全方面推荐的方法是使用HTTPS URLs来实现更新检查。这会提供第一级别的欺骗保护。对于更新下载,最好不要使用HTTPS RLs以避免使你Web服务器的负荷过重。而是给你的应用程序的程序集添加强名称并使用程序集验证特性。

  (三)可扩展性

  在这篇文章前面讲过的示例中我们简单地通过拖放一个组件到应用程序中并设置一些属性来实现自动部署。

  虽然这在许多应用程序中工作的很好,但在一些应用程序中会需要高级别的控制,这只能通过写代码来获得。我们可以编写自己的代码来替换掉.NET应用程序更新组件标准过程,使用重写的CheckForUpdate()和ApplyUpdate()方法来定制检查和更新行为。

  (四)调试

  这一节将指出一些首选的调试选项,以及描述使用该组件的用户大多数常见的问题。

  .NET应用程序更新器在和AppStart.exe相同的目录下生成一个名为AppUpdate.log的隐藏日志文件。

  所有的更新成功和失败信息都记录在该日志中。当有一个特殊的客户端不能成功更新时日志文件会特别有用。

  你可以使用日志来判断在什么时间以及是如何更新失败的。另外,.NET应用程序更新组件使用.NET框架的Debug类来输出大量有用的信息。如果你在调试器中运行你的应用程序,你会在输出窗口中看到这些信息。你可以循着.NET应用程序更新器的记录重点观察并找到出
问题的地方。

  如果由于某种原因,你无法使得.NET应用程序更新器工作,在你深入调试之前请确定以下几点,你遇到的问题很可能就是如下之一:..

  . 你是否将IIS目录浏览给打开了?如果没有,更新器将不会下载安装任何文件。

  . 你是否正确的部署了一切并正确设置了URL?

  . 如果你的应用程序安装在program files目录下,确定你是该机的超级管理员或超级用户吗?如果不是,你将不会有写权限来更新应用程序。

  . 你是在应用程序的主用户界面线程中生成AppUpdater对象的吗?如果不是,更新器将不能显示用户界面并且在激发事件回到用户界面时失败。

  . 是否更新成功,但应用程序使用新的更新自动重启时失败?.NET 应用程序更新组件试图通过调用Application.Exit方法来退出应用程序。然而,该方法并不能保证关闭一个应用程序。如果你生成并遗留了单独的线程在运行,该方法就无法关闭进程。保证所有线程终止的解决的方案是通过调用Application.OnExit事件,或者挂钩.NET应用程序更新器的OnUpdateComplete事件并自己处理关闭。

  五、总结

  客户端应用程序部署方便是.NET框架第一个版本的重要的目标。用.NET框架建立解决部署问题的客户端应用程序是一种很好的技术。部署方便仍然是未来.NET框架新版本的一个重要目标。就方案而言,这里描述的.NET应用程序更新组件代表了我们的一些想法,在未来版本的.NET框架中我们将可以直接使用。然而,在那个时候到来之前的这段期间,.NET应用程序更新组件不失为开始建立自动更新应用程序的一种重要的方法

出自:csdn,在天极上看到的,还没仔细研究,留做以后参考

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:.NET下正则表达式应用的四个示例

下一篇:使用asp.net进行多关键字查询的例子