Python脚本生成的exe文件自动升级程序实现方法

最近同事使用python写了一个在公司内部使用的 C/S 架构的软件,主要功能在服务端完成。通过pyinstaller 生成 exe的客户端,希望能够给客户端增加版本校验自动升级功能

在这里记录下实现的过程
升级思路:

1. 下载新版软件
2. 关闭当前运行的旧版软件
3. 删除旧版软件
3. 启动新的软件

网上搜索了下,大多数的实现方式都是使用2个exe,来完成。
在这里我不想使用2个exe,决定太麻烦
参照网上 http://bbs.csdn.net/topics/30359845 做了一个python版的实现。
实现思路:
当前进行下载完文件后,写一个bat脚本,启动脚本,然后退出。
脚本完成删除旧程序,运行新程序的功能。
如果要求不改变exe的名字,可以在脚本中加一句改名字的操作,将旧程序删除后,将新程序改为旧程序的名字,再启动新程序。
新程序启动后,将旧程序遗留的脚本删除。

以下为代码:

import os
import sys
import subprocess 

#编写bat脚本,删除旧程序,运行新程序
def WriteRestartCmd(exe_name):
    b = open("upgrade.bat",'w')
    TempList = "@echo off\n";   #关闭bat脚本的输出
    TempList += "if not exist "+exe_name+" exit \n";    #新文件不存在,退出脚本执行
    TempList += "sleep 3\n" #3秒后删除旧程序(3秒后程序已运行结束,不延时的话,会提示被占用,无法删除)
    TempList += "del "+ os.path.realpath(sys.argv[0]) + "\n"    #删除当前文件
    TempList += "start " + exe_name     #启动新程序
    b.write(TempList)
    b.close()
    subprocess.Popen("upgrade.bat")
    sys.exit()  #进行升级,退出此程序

def main():
#新程序启动时,删除旧程序制造的脚本
    if os.path.isfile("upgrade.bat"):
        os.remove("upgrade.bat")
    WriteRestartCmd("newVersion.exe")

if __name__ == '__main__':
    main()
    sys.exit()

代码中不使用os.system()是因为 这个函数会阻塞,等待bat脚本操作完成后,才会继续执行。不适合此处场景

你可能感兴趣的:(python)