我正在开发一个软件,出于几个原因,我希望开发自己的自动更新功能。该程序是一个完整的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")
我可以使用此方法执行交换吗?
答案 0 :(得分:0)
这与你的question类似,接受的答案是:
下载新版本的安装程序后,即可使用 使用
atexit.register()
os.exec*()
运行安装程序, 例如atexit.register(os.execl, "installer.exe", "installer.exe")
。 这将使安装程序在应用程序即将启动时启动 出口。应用程序将在os.exec*()
后立即退出 打电话,所以不会出现比赛条件。
看起来像是一个很好的解决方案