从在线升级说起

b/s比c/s有一个非常大的优势在于升级简单,升级有限的服务器就ok了,而c/s模式则是每台客户机都需要升级,版本一致比较难控制,所以在线升级就成了很重要的问题。

当时研究这个的时候存在的问题是,公司所有的产品的在线升级是VB写的加上几个VC写的com组件,每个产品需要就修改部分源代码,然后编译出一个自己产品用的,然后可能一台电脑上安装了几款我们公司的产品,也有好几个升级进程,相互影响。还有如果不是管理员权限,安装补丁包就会不能写注册表之类的,有一些问题。

研究了下谷歌的一个在线升级项目,开源的,叫omaha,链接http://omaha.googlecode.com/svn/wiki/OmahaOverview.html,然后看了一下介绍,尝试编译google update开源项目:omaha。

附几个资料链接:

http://code.google.com/p/omaha/wiki/DeveloperSetupGuide

https://code.google.com/p/omaha/source/browse/

https://code.google.com/p/omaha/wiki/HammerOptions

http://omaha.googlecode.com/svn/wiki/cup.html

这里用到了很多ATL和WTL的技术,编译器最好是VS2008,之前试过2010,没能成功,构造脚本python写的,只能尝试重建一个虚拟机,搭建如下构造环境:

一通折腾之后,还排除了一些编译错误,构造出来之后,发现效果并不好,支持断点续传,但好像没有本地版本检测,都是全新下载安装,代码量大到让人叹气,这么一个几千行代码就能完成的功能,几百个头文件和cpp文件也是醉了,不过代码确实写得很规范,敢公开代码肯定是有自信的,只能扒了扒怎么提升进程权限,因为文档有限,研究别人代码在没文档的情况太痛苦,所以还是自己写吧。

其实主要流程是考虑:

1.由每个产品都调用这个在线升级的exe,由它自己来控制只有一个进程在运行,这在技术上并不困难。

2.建立一个补丁包的命名机制,由它来控制版本,什么补丁安装,什么补丁不安装,大版本和小版本怎么安装之类的。

3.安全机制,服务器上的文件经过校验才会被安装,防止服务器被黑或是管理员操作失误,把一些不该安装的程序推送给了用户。

4.补丁包下载了之后,检测该补丁包对应的产品是否在运行,如果在运行,则需要停止其运行,因为安装一些在运行的程序的补丁,它的一些文件被占用可能导致安装失败。

5.权限问题,由于我们习惯了XP的admin权限,当处于非admin或是win7下时,有些函数难以实现我们需要的功能。

6.实现断点续传功能,先技术尝试一下,这个简单。

代码就不贴了,大概5000行的样子,如果当时用正则表达式,而不是拼凑字符串,代码量应该会少很多。

有空再详细写写。

时间: 2024-10-22 17:32:56

从在线升级说起的相关文章

.Net remoting方法实现简单的在线升级(上篇:更新文件)

一.前言:       最近做一个简单的在线升级Demo,使用了微软较早的.Net Remoting技术来练手. 简单的思路就是在服务器配置一个Remoting对象,然后在客户端来执行Remoting对象中的方法. 过程: (1) 读取本地dll文件的名称与版本号,与服务器的进行对比 (2) 确认需要升级的文件名称与版本号并告诉服务器,服务器将其复制到一个临时文件夹并压缩成zip (3) 将服务器的zip下载到本地的临时文件夹,并解压. 定义服务器端为UpdateServer,其配置文件为: <

VB.NET在线升级程序源代码,可以独立使用

这个程序是我做一个办公管理系统的时候用到的,这里有源码,需要的亲拿去研究学习:vb.net在线升级程序: 程序实现了通过vb.net连接远程云服务器,并且从云服务器中获取更新,并且自动下载更新,升级本地客户端程序: 下载地址:UpEASoft.zip   429.56 KB

Android在线升级相关笔记一(解析服务器版本与当前版本比较)

大概流程:Android客户端去访问服务器上的封装了版本号等信息的xml文件,对服务器上的版本和当前版本进行比较, 如果低于服务器的版本,则下载服务器上的新版软件,进行安装替换,完成升级. 一.首先用tomcat搭建服务器,用于开发测试. 下载tomcat请参考:http://blog.csdn.net/only_tan/article/details/25110625 1.在tomcat中新建自己的项目: \apache-tomcat-6.0.39\webapps 目录下新建自己的项目文件夹,

SequoiaDB版本在线升级介绍说明

1.前言 在SequoiaDB数据库发展过程中,基本保持每半年对外发行一个正式的Release版本.并且每个新发布的Release版本相对老版本而言,性能方面都有很大的提高,并且数据库也会在新版本中加入很多新的功能,希望能够提高数据库开发的易用性. 在SequoiaDB发展过程中,越来越多的开发者了解到它,并且对它发生兴趣.现在已经有越来越多的用户在学习.研究SequoiaDB,并且也有越来越多的企业用户在对SequoiaDB经过充分测试后,决定将SequoiaDB部署在企业的生产环境中,利用S

PIC32MZ 通过USB在线升级 -- USB CDC bootloader

了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 最近给我的开发板PIC32MZ EC starter kit写了个USB 在线升级程序--USB CDC bootloader.有了它,我可以很方便的升级我的应用程序.我大概是一个星期前开始决定写这个USB在线升级程序的,USB 有很两种类型,USB host和USB device. 由于USB host接触不多,所以我

软件更新相关,使用utuils框架在线升级,显示progressDialog,下载完成后自动弹出安装界面。

使用utuils框架在线升级,显示progressDialog,下载完成后自动弹出安装界面. 1 private void updateDownload() { 2 //检测内存设备是否可用 3 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ 4 //设置存储路径 5 final String targer = Environment.getExternalStorageDirectory

BS网站在线升级(服务器通信)

背景:日前公司需要将客户企业站增加在线升级功能.即客户登录自身网站管理后台后台,发生请求到我公司门户网站,如果存在新版本则提示用户更新.客户从我们公司买到的空间.数据库.和网站代码后可以直接根据智能提示完成webconfig配置,后期客户可以从我们手中购买网站模版实现个性化风格主题的网站设置.我们所有客户的网站结构是一模一样的.因为前台客户浏览的页面均为代码自动生成的静态页,所以更新过程不影响访客浏览. 分析:BS架构项目不同与CS架构——通过请求检测版本更新后返回更新包,根据本地安装目录即可完

嵌入式系统 - 在线升级

所谓在线升级,指在Linux启动后可通过网络传输内核或者文件系统,然后替换掉原来的文件,有以下2种方法: 提示:在线升级功能要使用ramdisk文件系统.这种文件系统会加载到内存中使用,用户做任何修改都不会写入flash,不会保存. 1.uboot下将内核.文件系统等文件通过jffs2压缩后写进flash某个分区,在Linux下将次分区挂载到文件夹下, 然后就能看到这些文件,可以直接予以替换升级: 2.内核等文件直接写入flash分区中,在Linux下通过 /dev/mtdblock 设备将升级

Win7系统在线升级安装win10的操作方法

在微软公司结束win10免费升级的之前,很多用户没有赶上这趟末班车,现在,部分用户觉得win10系统美观新奇,想装机使用,但是由于自己小白,不会装系统,就没有办法使用到win10系统.今天,小编就教你们最简单的步骤来安装win10操作系统.让你们体验下win10与win7的不同. 首先,在电脑浏览器上下载无忧系统助手(注:在下载前需要关闭电脑安全助手类软件,避免出现拦截安装失败的情况,而影响到软件使用) 1.点击打开无忧系统助手一键重装系统软件,在澳门银河娱乐场软件界面点击“在线重装” 2.点击