挖井

类库大魔王的挖井日记

挖一口属于自己的井


自动升级程序

  今天一时兴起,修改了一会儿自动升级程序。这个自动升级程序半年前就做了,当时用的boost::asio来实现http下载文件,可是问题就在于下载时,CPU占用99%,而且下载速度并不快,这让我很郁闷,在网上也没有找到确实可行的解决方法。后来觉得功能基本可用了,就一直丢在那里不管了。
  前些日子,另一个同事也开始为Impeller做了一个自动升级程序。那个程序的实现我不喜欢,它在升级时没有一个可见的需要升级的文件列表,进度条也只有一个总的,总之至少从界面上看,是个很土的程序。不过它除了能升级本地应用程序的必要文件外,还能进行Gems包的升级。另外,似乎它还可以在文件被替换的前后,执行一些额外的操作,比如一个COM组件可能需要注册,这时这个功能就很有价值了。不过,有时候我又觉得,有必要那么复杂吗,它还想内嵌一个Ruby解释器,能执行Ruby脚本,晕死!
  在我心中,一个比较理想的升级程序应该是这样的:
1、每次都是从一个指定的地方获取一个文件列表,文件列表中记录了可升级的文件的相关信息,如文件名、相对路径、大小、hash值、日期、版本号等,每次都是将本地的文件跟文件列表中的信息进行比较,才得出是否需要升级的决定;
2、一般下载文件都是通过http的方式(比较简单)实现,这样可以实现多线程及断点续传;
3、下载时,有针对当前下载文件的进度以及所有文件的总进度;
4、允许用户中断升级过程;
5、能自动替换文件,包括被打开的文件;
6、能最小化到托盘图标;
7、能通过配置就可以直接适应其他升级需求(配置可以放在文件中、注册表中,或直接通过命令行得到);
8、在替换文件前后,可以执行简单的命令行,不需要执行什么脚本程序那么复杂;
9、升级程序自身文件体积应该比较小;
10、有良好的出错保护机制;
11、可自动生成第一步需要的文件列表;
12、支持子目录中的文件升级。
  暂时就只想到这些,呵呵,抽空用WTL写一个。

本文地址:

https://minidump.info/blog/2008/05/e8-87-aa-e5-8a-a8-e5-8d-87-e7-ba-a7-e7-a8-8b-e5-ba-8f/

上一篇

继续读《重构》

  《重构》中文版一直都放在公司电脑前,随时读上几页。有时不觉会为其中的精妙之处深深折服,大呼过瘾。看着一种一种的重构手法,该手法的使用场景,不时会有深有同感的感叹。  有些情况下,自己写的代码,写着写着,自己都觉得很不爽,但不知道问题出在哪里,功能是可以实现,但总会觉得不舒服,又不知道如何改...…

Reading 全文阅读
下一篇

有些问题是看不出来的

  有些问题是看不出来的。  今天因为有人提了单,我才下决心去看了一下代码,经过比较仔细的排查,最后结论是,果然是被我改坏了,原来的那种实现方式确实是不会出这种问题的,不过那种实现方式是一定不能留的,一定要被改掉的,只能在现在的基础上进行修改,最后好像勉强可以了,哈哈。  还有一个问题,好久好...…

Job mm 全文阅读