更新程序:覆盖文件?

时间:2016-08-27 19:01:37

标签: python pyqt auto-update

我正在开发一个软件,出于几个原因,我希望开发自己的自动更新功能。该程序是一个完整的GUI,用PyQt编写,并使用图标,数据文件等。它将被cx_freeze或pyinstaller冻结。

自动更新部件将在远程服务器上下载新版本(zip)。然后,它变得复杂:

软件正在运行,并已下载新版本。它与新版本有什么关系?软件可以从zip中提取文件,并覆盖正在运行的版本的文件吗?

或者我应该将新版本存放在一边,退出正在运行的版本,并以某种方式使用新版本?如果是这样,我如何进行旧版和新版之间的交换?

编辑:

以下是我的QMainWindow类的closeEvent方法:

def closeEvent(self, event):

    """Method to perform actions before exiting.
    Allows to save the prefs in a file"""

    ...Do some stuff...

    QtGui.qApp.quit()

    self.logger.info("Closing the program")

我可以使用此方法执行交换吗?

1 个答案:

答案 0 :(得分:0)

这与你的question类似,接受的答案是:

  

下载新版本的安装程序后,即可使用   使用atexit.register() os.exec*()运行安装程序,   例如atexit.register(os.execl, "installer.exe", "installer.exe")。   这将使安装程序在应用程序即将启动时启动   出口。应用程序将在os.exec*()后立即退出   打电话,所以不会出现比赛条件。

看起来像是一个很好的解决方案