原文 NSIS:应用软件自动升级功能的探索与实践

记得以前轻狂曾分享过使用第三方软件实现应用软件自动升级功能

(详细http://www.flighty.cn/html/soft/20110106_108.html)

但那个QUpdater毕竟不是自己写的,用起来不怎么放心,关键是其开发者对程序进行了各种限制。

现在,轻狂用NSIS来实现软件自动升级功能,有兴趣的同学可以共同探讨。

本文为原创文章,转载请注明出处和链接!(鄙视一下COPY帝……)

实现过程:

1、搭建一个HTTP环境,放置升级安装包文件(少轻狂.exe,关于这个升级安装包怎么写,请参考NSIS:制作软件升级安装包http://www.flighty.cn/html/bushu/20100208_20.html)和版本记录文件(up.txt,其中记录了版本号和少轻狂.exe的MD5值);或者把升级安装包文件文件和版本记录文件放在互联网空间中,只要在浏览器中键入地址可以直接下载即可。

2、运行本地机器中用NSIS写的up.exe,自动根据升级服务器配置文件(upserver.txt)中指定的服务器地址(这个地址可以自行更改以便更广泛的适用)下载版本记录文件(up.txt)到本地,将up.txt中的版本(或MD5)与本地机器中软件的版本(或MD5)进行比对,不一致则自动下载少轻狂.exe,下载完成后将up.txt中记录的MD5值与下载到的少轻狂.exe的MD5值进行比对,如果一致则自动运行升级,否则删除少轻狂.exe以免运行了错误的安装包。

实现图示:

演示程序与上述实现过程稍有区别,请注意。不过整体思路是一致的。

下载配置文件失败的提示

演示程序为了方便查看是否已经升级,先打开旧文件(实际应用中因为需要静默运行,故无此步骤,此为演示截图。)

比对软件MD5(实际应用中因为需要静默运行,故不会显示此消息,此为演示截图。)

升级完成提示

打开新版本文件

至此整个升级过程完成。

如果再次运行升级程序会提示无需升级了(实际应用中因为需要静默运行,故不会显示此消息,此为演示截图。)

应用扩展:

客户网络环境如下:有N个分店,每个分店的服务器可以连接互联网,但基于安全和维护方面的考虑,限制了分店客户端连接互联网。

根据此环境,扩展如下:各个分店服务器的down.exe从源升级服务器(或者网站)判断是否有更新,如果有则将升级文件下载到分店服务器的HTTP环境中,分店客户端的up.exe从分店服务器判断是否有更新,如果有则下载到客户端机器进行更新。

这样做的好处:

1、有效减轻源升级服务器(或者网站)下载压力,节省带宽。

2、由于分店客户端的升级是在局域网内进行,下载速度会非常快,而且大大减少文件下载失败或下载的文件MD5不一致的问题。

付费定制:

此源码出售(提供升级程序up.exe的源码、自动下载升级文件到HTTP环境down.exe的源码、HTTP环境搭建程序安装包、简单使用说明文件)

也可以根据要求进行一定的付费定制(付费定制不提供源码,只提供编译好的程序)

有意者请与我联系softsetup#qq.com(把#换成@)

演示程序:

下载解压后运行文件夹中的up.exe即可查看演示效果。

NSIS:应用软件自动升级功能的探索与实践的更多相关文章

  1. Android 一s个相对完整的自动升级功能实现代码

    由于项目的需要最近做了一个关于Android自动升级的功能,下面将贴出Android手机客户端的完整代码.这段代码参考别的代码居多,由于不满足需求,所以自己仅仅改了一些需要变动的内容,其他功能都是按照 ...

  2. Android 一个相对完整的自动升级功能实现代码

    由于项目的需要最近做了一个关于Android自动升级的功能,下面将贴出Android手机客户端的完整代码.这段代码参考别的代码居多,由于不满足需求,所以自己仅仅改了一些需要变动的内容,其他功能都是按照 ...

  3. Delphi程序的自动升级功能的实现(AutoUpdate使用指南)

    在UtiMnid组件下,利用auAutoUpgrader实现自动升级(已经测试通过) 第一步:下载AutoUpgrader.Pro.v4.6.4. 第二步:打开AutoUpgrader.Pro.v4. ...

  4. ionic2 rc2 添加版本更新自动升级功能

    不废话,直接上代码 首先安装四个必备的插件: cordova plugin add cordova-plugin-app-version //获取APP版本 cordova plugin add co ...

  5. NetworkComms 文件上传下载和客户端自动升级(非开源)

    演示程序下载地址:http://pan.baidu.com/s/1geVfmcr 淘宝地址:https://shop183793329.taobao.com 联系QQ号:3201175853 许可:购 ...

  6. c/s 自动升级(WebService)

    首先声明,本人文笔不好,大家见笑,欢迎高手吐槽. 做c/s开发肯定会遇到的就是自动升级功能,而这实现方式是非常多. 本文使用 webservice的方式来提供升级服务 首先准备服务 为了方便我们专门用 ...

  7. java CS结构软件自动升级的实现

    前段时间做了一个工具发布给公司的各部门使用后反馈了不少BUG,每次修改后均需要发邮件通知各用户替换最新版本,很不方便,因此后来就写了一个自动升级的功能,这样每次发布新的版本时只需要将其部署到自动升级服 ...

  8. 在WinForm中使用Web Service来实现软件自动升级

    来源:互联网 winform程序相对web程序而言,功能更强大编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术 ...

  9. HTML5进阶(二)HBuilder实现软件自动升级

    HBuilder实现软件自动升级 前言 移动APP开发好后需要实现软件自动升级功能,经过一番搜索,发现HBuilder具有"App资源在线升级更新"的功能,遂研究之. 经过一番测试 ...

随机推荐

  1. NSUserDefaults写作和阅读对象定义自己

    需要编写对象必须实现NSCoding protocol Person Class Person.h #import <Foundation/Foundation.h> #import &q ...

  2. uva 11427 - Expect the Expected(概率)

    题目链接:uva 11427 - Expect the Expected 题目大意:你每天晚上都会玩纸牌,每天固定最多玩n盘,每盘胜利的概率为p,你是一个固执的人,每天一定要保证胜局的比例大于p才会结 ...

  3. STL 源代码分析 算法 stl_algo.h -- merge

    本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie merge (应用于有序区间) ------------------------------ ...

  4. 【Nginx】epoll事件驱动模块

    Linux 2.4之前的内核版本号,Nginx事件驱动的方法是使用poll.select功能.过程必须等待一个事件发生在连接上(接收数据)时间,部连接都告诉内核,由内核找出哪些连接上有事件发生.因为须 ...

  5. 【buildroot-2011.11】You may have to install &#39;g++&#39; on your build machine

    buildroot - 2011.11 当进行交叉编译.例如像以下错误提及演示: "You may have to install 'g++' on your build machine&q ...

  6. JAVA程序生成XML标准化的文件格式,缩进,美化。

    //他开始Document映射到文件 TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer t ...

  7. mysql float double 类型

    1.float类型 float列类型默认长度查不到结果.必须指定精度. 比方 num float, insert into table (num) values (0.12); select * fr ...

  8. Java 抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families ...

  9. 非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)

    1.HDFS简介 HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开 ...

  10. 左右xcode的重构选项的一些理解

    Rename(重命名):对标示符进行重命名,以获得更好的代码可读性,这些标示符包含类,方法或者函数的名称. Extract(抽取):将你在XCode种选择的代码抽取到一个新的方法或函数中. Creat ...