应用程序自动升级解决方案 (.NET/非.NET都适用)

所以每次做了东西都会有话想说.

原来做 Pacgen (PAC file GENerator) 的时候, 为了实现自动升级, 专门写了个叫 Updative 的命令行工具 (当然还有个给程序用的 DLL), 会比对每一个文件的版本, 并且生成一个目录文件, 这样软件升级的时候就只需要下载更新的文件. 当时做得还是蛮有意思的. 可惜后来想做得更强大, 反倒把逻辑搞混了, 于是不了了之.

最近重写了 Pacgen, 并且因为不再使用 PAC 文件, 而是用 Privoxy 自带的 filter, 再叫 PACgen 也不大说得过去, 便改名 X-Wall, 也更直观. (欲知详情, 请访问 http://x-wall.org/)

所以怎么解决这个自动升级的问题呢? 网上其实有不少现成的类库, 不过我是个怕麻烦的人, 所以懒得去看文档… 我是使用的 Inno Setup 打包的程序. 所以一开始只是给程序提供了简单的版本检查, 下载新的安装包, 并且执行. 之后由用户手动完成. 因为安装包会记住用户之前的设置, 所以实际上这个过程除了多点几下下一步, 也没什么太大的不好.

所以整个流程便是, 启动安装包, 退出程序, 安装后再启动.

但说来我也知道 Inno Setup 有些命令很久了, 就是没联系到一起. 不过还好在有生之年这一天终于是出现了. 改动几行代码, 下载之后启动安装包时加上 /silent 开关, 便大功告成啦.

这里需要 Inno Setup 的相关配置文件添加上安装完成后启动的选项, 并且不能设置为在 silent 模式下禁用.

虽然这样一来, 每次更新都会更新全部文件, 但对于小工具来说, 文件大小还是非常能接受的. 加上我是把东西都放在 Github 上 (详情可以查看我的前一篇文章, 让 Github 成为免费的软件发布/下载/更新的服务器), 速度也不错.