我有一个使用wxPython(使用PyInstaller)创建的exe。在代码中,我有能力下载exe的更新(因此下载exe的副本)。人们有这个exe"安装"在C:\Program Files\MyProgram\MyProg.exe
文件夹中的计算机上,我使用urllib.urlretrieve(url,'MyProg.exe')
下载新文件。它正确下载但现在我想自动关闭当前窗口并重新打开exe(新下载的版本)。
我的步骤:
我的节目关闭但没有任何反应。如果我取出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()
答案 0 :(得分:2)
您需要写出另一个文件,例如:批处理文件,等待一段时间,然后将临时的下载文件复制到现有文件上,然后重新启动它,并删除自己。然后异步调用它,即不等待它完成然后退出让它运行。
答案 1 :(得分:0)
def Restart(self):
os.execl(sys.argv[0])
我认为可以重新启动