SharpUpdater是一个基于.net Framework,将自动更新功能添加到您的windows桌面程序的引导程序。从2.0版本起,它也是一个解决方案,增加了一个示例服务端,提供了一组API供开发人员扩展。
一、工作原理
Updater.exe 从服务端下载最新版本的发布清单配置文件,同本地发布清单进行比较,如果发现本地版本落后,则从服务端下载差异文件,覆盖到本地, 然后启动主程序。
二、服务端配置
以IIS7.5为例
1、新建一个IIS站点。
2、禁用*.dll程序处理映射,以允许dll文件下载。
3、在此站点下创建桌面程序子目录,如~/demo/。
三、客户端配置
1、包括或引用SharpUpdater.Util.dll/Updater.exe,如果需要用到zip格式更新包,还需要包括ICSharpcode.SharpZipLib.dll/CnSharp.ZipUtil.dll
2、主程序入口增加对Updater的互操作代码
private static void Main(string[] args) { if (args.Length == 0) { Process.Start("updater.exe"); Application.Exit(); return; } if (!args[0].StartsWith("ok")) { Application.Exit(); return; } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }
四、打包发布
1、SharpPack
SharpPack是一个VS2010扩展,用于生成WinForm程序并发布清单
首先安装VS扩展,将SharpPack.7z解压缩后copy 到 C:\Users\[username]\Documents\Visual Studio 2010\Addins 下就可以了。
启动VS,打开项目。
右击WinForm项目,选择Package and Publish命令
设置Assembly版本号
挑选需要发布的文件,填写Release List相关字段
2、将bin目录下生成的ReleaseList.xml和1.0.0.0文件夹上传到服务端的~/Demo/下
五、可扩展性
1、Updater的扩展
1)实现 CnSharp.Windows.Updater.Util.UpdateProxy.IUpdateProxy
在SharpUpdater的源代码中,我们没有实现此接口,参见CnSharp.Windows.Updater/Common.cs/Ln.14。因此默认情况下只显示待更新版本当前版本的更新日志;假设用户从V1.0升级到V1.4,则只能看到V1.4的更新日志,看不到V1.1~V1.3的。开发人员可自行实现它。
2)SharpUpdater源码基于MIT协议,你可以自由修改。
2、SharpPack的扩展
1)基类: CnSharp.Windows.Updater.SharpPack.Connect
提供了一组protected virtual方法,你可以重写它们自定义UI或操作。
2)接口:IVersionControl
此接口帮助你签出 AssemblyInfo.cs 以修改版本号。默认实现了TFS,你可以自行实现其他版本控制工具如SVN。
六、开源