2012-10-11 38 views
3

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

1)数据的更新(即包括运行该程序所需的信息的XML文件是更新) - ,则将发生此类型的更新的更经常

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

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

+0

我想你应该指定哪种类型的os有问题。 – defuz

+0

我正在使用python,我希望它是跨平台的。可执行文件是windows,但未编译的python脚本是针对Linux和OS X发布的。 –

回答

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 
在这种情况下,程序会告诉你该程序是最新的

4

设置一个简单的web服务,返回xml文件和可执行文件的当前版本号。让您的程序在启动时拨入本Web服务的主页,如果Web服务返回更新的版本号,则程序在其本地副本中显示一条消息,告知用户可以更新(或启动自动更新过程) 。

+0

这基本上就是我想要做的。问题是我不知道如何编程。另外,我没有管理员权限给服务器,所以让python只检查我们每次更新程序时手动更新的服务器上的文件会更容易。所以我想真正的问题是这样的:有没有办法让python读取html文件的内容? –

+1

您可以将一个静态文本文件放在服务器上的已知url中,并在发布更新时更新该静态文本文件。让你的程序在启动时下载该静态文本文件,并解析它的版本号。可能像这样使用json:http://daycodes.com/version.json –

+0

是的,这就是我想要做的。谢谢! –