最近的一个项目实现了客户端的自动更新功能,目前整个程序正常使用,做个总结记下来。
客户端的自动更新无非就是那个步骤,其实难度倒是不大,考虑的细节比较多.
1.当程序在客户端被打开的时候需要读取本地程序的版本号。
2.客户端程序读取服务器上xml文件的最新的一个版本号、
3.判断版本号,如果服务器上的版本号是最新的,那么就提示客户端需要更新,否则程序正常运行。
4.客户端将最近的程序dll文件下载到本地并覆盖至程序安装目录,至此 整个更新过程完成
在做这个自动更新程序的时候,我参考了园子上面各种更新方法,可能是我技术不怎么样,总是遇到各种各样的问题,最终选择了目前的这个更新方法,使用很简单,只需要写几段代码即可
1.首先我们要为程序添加自动更新的功能
注意:自动升级程序取当前程序文件的版本,是以当前运行的程序集版本作为识别依据的。
首先在VS中为当前的主程序项目添加引用,引用“客户端”中的“SimpleUpdater.exe”。
在VS中,点开“解决方案管理器”中相应项目的“属性”节点,打开 AssemblyInfo.cs 文件,在最下面添加上一行自动更新声明:
- //--添加这行标记表示支持自动更新, 后面的网址为自动更新的根目录.
- [assembly: FSLib.App.SimpleUpdater.Updateable("http://ls.com/update.xml")]
这步是必须的,否则请求检查更新时会抛出异常;代码中的网址即上面提到的能访问到xml文件的网址。
到这里,准备工作即告完成,为代码添加上检查更新的操作即可。
- 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 之后你可以直接从资源管理器中拖放目标文件夹到目录的文本框来快速选择了!)
- 升级包路径:选择一个路径用来保存升级包(*.zip),同时自动更新信息 *.xml 也会保存在这个目录下
- 更新前执行:在下载完成、即将安装更新前会执行这里选择的程序。这里有点BUG一旦选择了就不能取消,所以请注意下;
- 更新后执行:在安装完成后、即将退出前执行的操作。需要注意的BUG同上。通常选择需要运行的主程序。
- 执行时间限制:用于限制6中选择的程序的执行时间,超过设置的时间后进程将会被强行结束。
- 更新说明:用于提示更新的时候显示的文本消息内容。
- 创建:按照填写的信息生成升级包
- 打开:打开一个已有的升级信息文件,用于下次更新版本时直接修改信息即可,其它的不需要变化(在1.5.0.0之后,你可以通过直接拖放以前保存的升级XML文件到窗体上直接打开了!)。
选项页面
- 更新时删除原始文件:默认情况下仅覆盖新文件。但是你可以设置更新之前删除应用程序目录所有文件,或删除指定文件。
- 支持更新的最低版本:指定支持更新的最低版本,低于此版本的软件将会提示手动更新
- 升级文件包密码:可以设置一个密码,用来加密生成的压缩包
发布更新包
最后附加个文档,是我在使用过程中遇到的各种问题做成的一个文档,希望能帮助到大家:/Files/tr550352743/呼叫中心自动更新使用文档.doc