Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2342383
  • 博文数量: 321
  • 博客积分: 3440
  • 博客等级: 中校
  • 技术积分: 2992
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-24 09:08
个人简介

我就在这里

文章分类

全部博文(321)

文章存档

2015年(9)

2014年(84)

2013年(101)

2012年(25)

2011年(29)

2010年(21)

2009年(6)

2008年(23)

2007年(23)

分类: Python/Ruby

2014-08-25 07:42:32

使用urllib 直接下载html

服务端 Respones把 安装包msi 的二进制流 输出,客户端判断下载下来的文件大小,

一般很小 就有可能是404等信息,只需判断文件大小来决定是否运行更新程序即可

如果为空则输出版本号,放到一个后台线程中运行 就OK了,只用更新服务端文件,

客户端登录自动安装更新,部分代码



  1. class UpdateTimer(threading.Thread):
  2.     Runing=False
  3.     def __init__(self):
  4.         threading.Thread.__init__(self)
  5.         self.setDaemon(True)
  6.         #self.start()


  7.     def start(self):
  8.         if UpdateTimer.Runing:return
  9.         UpdateTimer.Runing=True
  10.         threading.Thread.start(self)

  11.     def run(self):
  12.         try:
  13.             if not Cfg.TestConnection():return
  14.             def urlcallback(block_num,bloack_size,total_size):
  15.                 pass
  16. #                if not total_size:return
  17. #                #print total_size
  18. #                prec=100.0*block_num*bloack_size/total_size
  19. #                if 100 < prec:prec=100
  20. #                #print "%.2f%%"%(prec,)
  21.             local_path=GetCurrentPath()+'/run.msi'
  22.             #if os.path.exists(local_path):os.remove(local_path)
  23.             remote_path='http://'+Cfg.c_serveraddr+':81/update.aspx?type=doc&v='+Cfg.version+'&r='+str(Random())
  24.             urllib.urlretrieve(remote_path,local_path,urlcallback)
  25.             if os.path.getsize(local_path)/(1024*1024)<15:return
  26.             if not MessageBoxConfirm("当前检测到新版本客户端,\n现在安装吗?"):return
  27.             #os.popen(local_path)
  28.             #os.system(local_path)
  29.             #'msiexec.exe','*.msi','%systemroot%',SW_SHOWNORMAL
  30.             #win32api.ShellExecute(None,"open",local_path,"","",win32con.SW_SHOW)
  31.             win32api.ShellExecute(None,'open','msiexec.exe',' /a run.msi','%systemroot%',win32con.SW_SHOW);
  32.         finally:
  33.             UpdateTimer.Runing=False


  34. def CheckForUpdate():
  35.     UpdateTimer().start()
转自:http://blog.csdn.net/xugangjava/article/details/8542641
阅读(1603) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~