.Net 小型软件自动更新库(SimpAutoUpdater)[转载文章]
本类库+工具用于快速实现一个简单的自动更新程序,旨在快速简单地为现有的.Net应用程序添加上比较简单的自动更新功能。
在发布应用程序时,我们经常会需要给自己的程序加上自动升级功能。.Net Framework自带的ClickOnce中有自动升级的功能,但是往往不太好用,比如必须用ClickOnce发布,安装的文件夹一个版本一个等等,我们会想要一个比较简单、甚至绿色软件也能使用的自动升级功能,这个自动升级程序就是基于这个目的而制作的。
为了让使用起来更加简单快捷,我对内置的功能进行了大幅度的精简和集成,最简单的情况下只需要你只需要一行代码即可实现自动更新,如下所示:
FSLib.App.SimpleUpdater. Updater .CheckUpdateSimple( http://ls测试数据/update.xml ); 概述本类库+工具用于快速实现一个简单的自动更新程序,可以简单地完成小型应用程序的快速更新。
整个工具分成两部分,一部分是供用户使用的类库,一部分是用于生成更新包的工具。
基于 .Net 3.5 开发,原则上最好安装有此版的 .netFramework。特殊情况下,可以仅安装 .Net Framework 2.0SP1,发布的时候附带上 System.Core.dll 即可正常运行。
整个自动升级工作的流程更新包生成工具
作为一个简单的升级需求,不需要很复杂的设置。
需要填写如下信息:
应用程序名 当前的版本 (也就是更新后的版本) 发布地址可选 (如果填写了,在更新提示框上会有个链接可以链接到这个网址) 新程序目录 (选择最新版本程序的发布目录) 升级包路径 :选择一个路径用来保存升级包(*.zip),同时自动更新信息 *.xml 也会保存在这个目录下 更新前执行 :在下载完成、即将安装更新前会执行这里选择的程序。这里有点BUG一旦选择了就不能取消,所以请注意下; 更新后执行 :在安装完成后、即将退出前执行的操作。需要注意的BUG同上。通常选择需要运行的主程序。 执行时间限制 :用于限制6中选择的程序的执行时间,超过设置的时间后进程将会被强行结束。 更新说明 :用于提示更新的时候显示的文本消息内容。 创建 :按照填写的信息生成升级包 打开 :打开一个已有的升级信息文件,用于下次更新版本时直接修改信息即可,其它的不需要变化。发布更新包
更新包应该发布到服务器上。生成的文件有两个,一个是压缩包( *.zip ),一个是信息文件( *.xml ),两个应该一起发布。这里假定通过网址 http://ls测试数据/update.xml 能访问到生成的 update.xml 文件。
为应用程序添加自动更新功能注意 :自动升级程序取当前程序文件的版本,是以当前运行的程序集版本作为识别依据的。
首先在VS中为当前的主程序项目添加引用,引用“客户端”中的“ SimpleUpdater.exe ”。
在VS中,点开“解决方案管理器”中相应项目的“属性”节点,打开 AssemblyInfo.cs 文件,在最下面添加上一行自动更新声明:
这步是必须的,否则请求检查更新时会抛出异常;代码中的网址即上面提到的能访问到xml文件的网址。
如果您 希望更加简单的使用而不用去加这样的属性,或者您想程序运行的时候自定义,您可以通过下列方式的任何一种方式取代上面的属性声明:
使用 FSLib.App.SimpleUpdater. Updater .CheckUpdateSimple( "升级网址" ) 的重载方法。这个重载方法允许你传入一个升级包的地址; 在检查前手动设置 FSLib.App.SimpleUpdater.Updater.UpdateUrl 属性。这是一个静态属性,也就是说,您并不需要创建 FSLib.App.SimpleUpdater.Updater.UpdateUrl 的对象实例就可以修改它。
无论使用哪种方式,请确保在检查更新前,地址已经设置。
到这里,准备工作即告完成,为代码添加上检查更新的操作即可。
static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [ STAThread ] static void Main() { Application .EnableVisualStyles(); Application .SetCompatibleTextRenderingDefault( false ); var updater = FSLib.App.SimpleUpdater. Updater .Instance; //当检查发生错误时,这个事件会触发 updater.Error += new EventHandler (updater_Error); //没有找到更新的事件 updater.NoUpdatesFound += new EventHandler (updater_NoUpdatesFound); //找到更新的事件.但在此实例中,找到更新会自动进行处理,所以这里并不需要操作 //updater.UpdatesFound += new EventHandler(updater_UpdatesFound); //开始检查更新-这是最简单的模式.请现在 assemblyInfo.cs 中配置更新地址,参见对应的文件. FSLib.App.SimpleUpdater. Updater .CheckUpdateSimple(); /* * 如果您希望更加简单的使用而不用去加这样的属性,或者您想程序运行的时候自定义,您可以通过下列方式的任何一种方式取代上面的属性声明: * 使用Updater.CheckUpdateSimple 的重载方法。这个重载方法允许你传入一个升级包的地址; * 在检查前手动设置 FSLib.App.SimpleUpdater.Updater.UpdateUrl 属性。这是一个静态属性,也就是说,您并不需要创建 FSLib.App.SimpleUpdater.Updater.UpdateUrl 的对象实例就可以修改它。 */ FSLib.App.SimpleUpdater. Updater .CheckUpdateSimple( "升级网址" ); Application .Run( new Form1 ()); } static void updater_UpdatesFound( object sender, EventArgs e) { } static void updater_NoUpdatesFound( object sender, EventArgs e) { System.Windows.Forms. MessageBox .Show( "没有找到更新" ); } static void updater_Error( object sender, EventArgs e) { var updater = sender as FSLib.App.SimpleUpdater. Updater ; System.Windows.Forms. MessageBox .Show(updater.Exception.ToString()); } } 结束
详细的代码请参考附带的示例项目。
检查到更新时窗口如下:
这之后的更新操作都是全自动执行的,不需要在主程序中有任何其它操作。
关于开源当前发布的类库中并未包含源码,因为较多的细节尚未完善。在过段时间完善后,将会开源(预计版本1.5.0.0)。
DLL本身并未经过混淆,有兴趣的同学可以先看看,或发私信给我,我可以单独发给你。
下载库直接下载链接: http://HdhCmsTestu-tide测试数据/fish/Service.asmx/Download/33/28
发布页面: http://HdhCmsTestu-tide测试数据/fish/soft/simple_autoupdater/index.html
简单使用说明: http://HdhCmsTestu-tide测试数据/fish/soft/simple_autoupdater/usage.html
如果有问题或建议,请回复此日志,到讨论区反馈: http://HdhCmsTestu-tide测试数据/fish/Discussion.asmx/Index/33
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于.Net 小型软件自动更新库(SimpAutoUpdater)[转载文章]的详细内容...