wxPython-应用程序更新程序

wxPython-应用程序更新程序,python,python-2.7,wxpython,Python,Python 2.7,Wxpython,Iv使用wxPython和cefPython构建了一个应用程序。现在我正在构建一个更新程序来更新我的软件 程序如下: 一旦应用程序启动,就会调用更新程序 更新程序使用API进行检查 如果版本比API旧,它将下载新的压缩包 下载完成后,它关闭应用程序 关闭,现在应该提取新文件 提取,现在必须再次打开程序 我认为问题出现在第4点,因为我认为过程已经结束,所以现在剩下的步骤不会发生 我应该如何做才能使更新程序(我从主程序导入和调用的更新程序)不会关闭,如果这是个问题的话 下面是一些代码: import

Iv使用wxPython和cefPython构建了一个应用程序。现在我正在构建一个更新程序来更新我的软件

程序如下:

  • 一旦应用程序启动,就会调用更新程序
  • 更新程序使用API进行检查
  • 如果版本比API旧,它将下载新的压缩包
  • 下载完成后,它关闭应用程序
  • 关闭,现在应该提取新文件
  • 提取,现在必须再次打开程序
  • 我认为问题出现在第4点,因为我认为过程已经结束,所以现在剩下的步骤不会发生

    我应该如何做才能使更新程序(我从主程序导入和调用的更新程序)不会关闭,如果这是个问题的话

    下面是一些代码:

    import updater (updater.py)
    
    class MyApp(wx.App):
        timer = None
        timerID = 1
        def OnInit(self):       
            if not USE_EVT_IDLE:
                print("Using TIMER to execute the CEF message loop work")
                self.CreateTimer()
            global frame
            frame = MainFrame()
            self.SetTopWindow(frame)
            frame.Show(False)       
            **thread.start_new_thread(checkForUpdate, ()) --- This is where im calling the update function**
            return True
    
    
    
    def checkForUpdate():
        print("Checking for update: %s" % time.ctime())
        updater.callAPI()
        threading.Timer(120, checkForUpdate).start()
    

    谢谢

    既然您使用的是wxPython,为什么不使用它的内置更新程序模块呢?我认为它们是在2.8的最新版本中添加的,并且肯定包含在2.9中。他们基本上采用了Esky项目,并将其包装在wxPython助手中,以使其更易于使用。我在这里写了一篇关于这个主题的教程:

    您可以在这里阅读有关esky的信息:

    我也听说过“goodasnew”项目,但到目前为止我还没有尝试过:


    • 既然您使用的是wxPython,为什么不使用它的内置更新程序模块呢?我认为它们是在2.8的最新版本中添加的,并且肯定包含在2.9中。他们基本上采用了Esky项目,并将其包装在wxPython助手中,以使其更易于使用。我在这里写了一篇关于这个主题的教程:

      您可以在这里阅读有关esky的信息:

      我也听说过“goodasnew”项目,但到目前为止我还没有尝试过:


      一种解决方案是使用外部助手应用程序,该应用程序将再次启动主应用程序。这可能是一个简单的C/C++程序,因此任何依赖关系都是最小的,因此将来不需要任何更新。嘿,我最终将更新程序制作成一个单独的EXE文件,然后在udpate函数中使用一些参数启动该过程。现在它工作得很好。。现在我只需要删除任务栏上的图标,当杀死appOne时,解决方案将是有一个外部助手应用程序,它将再次启动主应用程序。这可能是一个简单的C/C++程序,因此任何依赖关系都是最小的,因此将来不需要任何更新。嘿,我最终将更新程序制作成一个单独的EXE文件,然后在udpate函数中使用一些参数启动该过程。现在它工作得很好。。现在我只需要在关闭应用程序时从任务栏中删除图标