我已经开发了自己的程序,但我希望能够动态地告诉用户该程序有可用的更新。这个程序是跨平台的,用python编写。将有两种类型的更新:
1)数据更新(包含运行程序所需信息的xml文件是更新) - 这种类型的更新将更频繁地发生
2)系统更新(实际可执行文件[已编译的python程序]已更新 - 此类更新不会经常发生
我需要能够连接到在线数据库并将其中发布的版本与当前程序版本进行比较,以查看是否有任何更新。如果服务器有更新,则程序需要能够以最少的用户输入下载和安装该更新。我的问题是如何告诉我的程序系统地检查更新,然后下载并安装它而不会导致程序崩溃或要求用户手动下载和安装它?
答案 0 :(得分:5)
设置一个简单的Web服务,返回xml文件和可执行文件的当前版本号。让您的程序在启动时拨回此Web服务的主页,如果Web服务返回更新的版本号,那么程序在其本地副本中具有的内容然后向用户显示一条消息,说明他们可以更新(或启动自动更新过程)
答案 1 :(得分:0)
一个简单的解决方法是在服务器上放置某种文件(比如说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
在这种情况下,程序会告诉您程序是最新的。