4

我已经开发了自己的程序,但我希望能够动态地告诉用户该程序有可用的更新。这个程序被设计成跨平台的,并且是用python编写的。将有两种类型的更新:

1) 数据更新(一个包含运行程序所需信息的 xml 文件被更新)——这种类型的更新会更频繁地发生

2)系统更新(实际的可执行文件[编译的python程序]被更新——这种类型的更新不会经常发生

我需要能够连接到在线数据库并将那里发布的版本与当前程序版本进行比较,以查看是否有任何更新。如果服务器有更新,则程序需要能够以最少的用户输入下载和安装该更新。我的问题是如何告诉我的程序系统地检查更新,然后下载并安装它而不会导致程序崩溃或要求用户手动下载和安装它?

4

2 回答 2

5

一个简单的解决方法是在您的服务器上放置某种文件(比如说 program.txt),并在其中放置一些有关最新版本的基本信息。然后你有一个与程序一起下载的类似 txt 文件(比如说 version.txt),并在代码中放置一个函数来比较 version.txt 和 program.txt。如果它们相同,那么您的程序是最新的。如果没有,您需要上网下载最新版本。

Python函数:

import Tkinter
import urllib

def updateCheck(self):
    update = False

    updateWindow = Tkinter.Toplevel()
    updateWindow.title(string="Update Checker")
    updateWindow.resizable(False, False)

    #Gets downloaded version
    versionSource = open('version.txt', 'r')
    versionContents = versionSource.read()

    #gets newest version
    updateSource = urllib.urlopen("http://www.suturesoft.com/Updates/craftbook.txt")
    updateContents = updateSource.read()

    #checks for updates
    for i in range(0,20):
        if updateContents[i] != versionContents[i]:
            dataLabel = Tkinter.Label(updateWindow,text="\n\nThere are data updates availible.\n\n")
            dataLabel.pack()
            update = True
            break
    for i in range(22,42):
        if updateContents[i] != versionContents[i]:
            versionLabel = Tkinter.Label(updateWindow,text="\n\nThere are version updates availible.\n\n")
            versionLabel.pack()
            update = True
            break
    if update == False:
        versionLabel = Tkinter.Label(updateWindow,text="\n\nYou are already running the most up to date version.\n\n")
        versionLabel.pack()

proram.txt 和 version.txt:

data_version:10.11.12
exec_version:10.11.12

在这种情况下,程序会告诉您程序是最新的。

于 2012-10-12T04:14:43.927 回答
5

设置一个简单的 Web 服务,返回 xml 文件和可执行文件的当前版本号。让您的程序在启动时拨回此 Web 服务,如果 Web 服务返回更新的版本号,那么程序在其本地副本中的内容然后向用户显示一条消息,说他们可以更新(或启动自动更新过程) .

于 2012-10-11T15:07:01.250 回答