关闭时重新打开wxpython exe

时间:2013-12-17 21:44:35

标签: python wxpython exe updates

我有一个使用wxPython(使用PyInstaller)创建的exe。在代码中,我有能力下载exe的更新(因此下载exe的副本)。人们有这个exe"安装"在C:\Program Files\MyProgram\MyProg.exe文件夹中的计算机上,我使用urllib.urlretrieve(url,'MyProg.exe')下载新文件。它正确下载但现在我想自动关闭当前窗口并重新打开exe(新下载的版本)。

我的步骤:

  1. 点击"更新" (我有这个设置)
  2. 关闭当前窗口/程序
  3. 下载新的exe(覆盖当前的exe)
  4. 打开新下载的exe
  5. 我的节目关闭但没有任何反应。如果我取出self.Close(),程序将仅在我将其保存为其他名称时下载新文件。然后我可以运行新保存的文件,但我当前的窗口保持打开状态。

    有什么想法吗?

    我的代码:

    class TMainForm(wx.Frame):
    
        def __init__(self, *args, **kwds):
            ....
    
        def OnProgramUpdate(self):
    
            dlg = wx.MessageDialog(self,
                "Update?",
                "Update", wx.YES_NO|wx.YES_DEFAULT|wx.ICON_QUESTION)
            closeresult = dlg.ShowModal()
            dlg.Destroy()
            if closeresult == wx.ID_YES:
                self.Close()
                urllib.urlretrieve(url,'MyProg.exe')
                p = subprocess.Popen("MyProg.exe")
    
    
    
    class TApplication(wx.App):
        def OnInit(self):
    
                wx.InitAllImageHandlers()
                MainForm = TMainForm(None, -1,"")
                self.SetTopWindow(MainForm)
    
                MainForm.Show()
                return 1
    
    if __name__ == "__main__":
        Application = TApplication(0)
        Application.MainLoop()
    

2 个答案:

答案 0 :(得分:2)

您需要写出另一个文件,例如:批处理文件,等待一段时间,然后将临时的下载文件复制到现有文件上,然后重新启动它,并删除自己。然后异步调用它,即不等待它完成然后退出让它运行。

答案 1 :(得分:0)

def Restart(self):
   os.execl(sys.argv[0])

我认为可以重新启动