• 大小: 10.92MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-07
  • 语言: Python
  • 标签: python  软件升级  

资源简介

用Python实现一个软件自动升级系统。设计思路很简单:当有新版本需要发布时,将文件放在服务端,生成一个记录每个文件变化的配置文件。客户端本地也有一个记录文件信息的配置文件,客户端检查更新时,将服务端的配置文件下载下来,与本地配置文件进行比较,然后下载有变化的文件,覆盖本地文件(如果文件正在使用中,可能无法覆盖,这时候更新前应该先关闭正在运行的客户端),中间有Tkinter做的界面提示更新进度。更新结束后根据策略决定是否重启客户端。

资源截图

代码片段和文件信息

# -*- coding: utf-8 -*-
# @Time    : 2019/4/25 20:16
# @Author  : g05325
# @File    : AutoUpdate.py
# @Software: PyCharm
# @Function: 实现客户端自动更新(客户端)
import os
import sys
import time
import getopt
import requests
import shutil
import zipfile
import tkinter
from tkinter import messagebox ttk
from contextlib import closing
import xml.etree.ElementTree as ET
import xml.dom.minidom as minidom


# 处理xml的类
class VersionInfoxml:
    def __init__(self xml_path server_info=None module_list=None):
        self.xml_path = xml_path
        if server_info is not None:
            if module_list is None:
                module_list = [“ClientVersion“]
            self.create_new_xml(server_info module_list)
        self.tree = ET.parse(self.xml_path)
        self.root = self.tree.getroot()

    def create_new_xml(self server_info module_info):
        root = ET.Element(“versionInfo“)
        ServerInfo = ET.SubElement(root “ServerInfo“)
        ET.SubElement(ServerInfo “ServerIp“).text = server_info[0]
        ET.SubElement(ServerInfo “ServerPort“).text = server_info[1]
        ET.SubElement(ServerInfo “xmlLocalPath“).text = server_info[2]
        for each_module in module_info:
            ET.SubElement(root each_module).set(“Version“ “0“)
        self.save_change(root)
        print(“I created a new temp xml!“)

    def save_change(self root=None):
        if root is None:
            root = self.root
        rough_bytes = ET.tostring(root “utf-8“)
        rough_string = str(rough_bytes encoding=“utf-8“).replace(“\n“ ““).replace(“\t“ ““).replace(“    “ ““)
        content = minidom.parseString(rough_string)
        with open(self.xml_path ‘w+‘) as fs:
            content.writexml(fs indent=““ addindent=“\t“ newl=“\n“ encoding=“utf-8“)
        return True

    def changeServerInfo(self name value):
        if type(value) is int:
            value = str(value)
        Xpath = “ServerInfo/%s“ % name
        element = self.root.find(Xpath)
        if element is not None:
            element.text = value
            # self.save_change()
        else:
            print(“I can‘t find \“ServerInfo/%s\“ in xml!“ % name)

    def addobject(self module_name file_path file_size last_update_time version):
        moduleVersion = self.root.find(module_name)
        object = ET.SubElement(moduleVersion “object“)
        ET.SubElement(object “FileRelativePath“).text = str(file_path)
        ET.SubElement(object “FileSize“).text = str(file_size)
        ET.SubElement(object “LastUpdateTime“).text = str(last_update_time)
        ET.SubElement(object “Version“).text = str(version)
        # self.save_change()

    def deleteobject(self module_name file_name):
        Xpath = “%s/object“ % module_name
        objects = self.root.findall(Xpath)
        moudleVersion = self.root.find(module_name)
        for element in objects:
            if element.find(‘FileRelativ

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2020-04-25 22:07  Client\
     文件       19666  2020-04-25 21:49  Client\client.py
     文件         243  2020-04-25 21:58  Client\start.bat
     目录           0  2020-04-25 21:51  Client\TempFolder\
     目录           0  2020-04-25 22:07  Client\venv\
     目录           0  2020-04-25 18:42  Client\venv\Include\
     目录           0  2020-04-25 22:07  Client\venv\Lib\
     目录           0  2020-04-25 22:07  Client\venv\Lib\site-packages\
     目录           0  2020-04-25 22:07  Client\venv\Lib\site-packages\__pycache__\
     文件         314  2020-04-25 18:46  Client\venv\Lib\site-packages\__pycache__\easy_install.cpython-38.pyc
     目录           0  2020-04-25 22:07  Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\
     文件           4  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\INSTALLER
     文件        1048  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\LICENSE
     文件        2746  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\metaDATA
     文件         947  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\RECORD
     文件           8  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\top_level.txt
     文件         110  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\WHEEL
     目录           0  2020-04-25 22:07  Client\venv\Lib\site-packages\certifi\
     文件          64  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi\__init__.py
     文件         243  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi\__main__.py
     目录           0  2020-04-25 22:07  Client\venv\Lib\site-packages\certifi\__pycache__\
     文件         258  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi\__pycache__\__init__.cpython-38.pyc
     文件         421  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi\__pycache__\__main__.cpython-38.pyc
     文件         910  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi\__pycache__\core.cpython-38.pyc
     文件      284099  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi\cacert.pem
     文件         792  2020-04-25 18:52  Client\venv\Lib\site-packages\certifi\core.py
     目录           0  2020-04-25 22:07  Client\venv\Lib\site-packages\chardet-3.0.4.dist-info\
     文件        2174  2020-04-25 18:52  Client\venv\Lib\site-packages\chardet-3.0.4.dist-info\DEscriptION.rst
     文件          60  2020-04-25 18:52  Client\venv\Lib\site-packages\chardet-3.0.4.dist-info\entry_points.txt
     文件           4  2020-04-25 18:52  Client\venv\Lib\site-packages\chardet-3.0.4.dist-info\INSTALLER
     文件        3239  2020-04-25 18:52  Client\venv\Lib\site-packages\chardet-3.0.4.dist-info\metaDATA
............此处省略2689个文件信息

评论

共有 条评论