我有一个使用wxPython(使用PyInstaller)创建的exe文件。在代码中,我有能力下载exe的更新(从而下载exe的副本)。人们有这个EXE“安装”在他们的计算机上的文件夹C:\Program Files\MyProgram\MyProg.exe
我使用urllib.urlretrieve(url,'MyProg.exe')
下载新文件。它正确下载,但现在我想自动关闭我当前的窗口,并重新打开exe(新下载的版本)。关闭时重新打开wxpython exe
我的步骤:
- 点击 “更新”(我有这样的设置)
- 关闭当前窗口/程序
- 下载新的exe文件(覆盖当前的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()
是否可以在Python代码(即时)中创建批处理文件?这样它可以创建批处理文件,然后在重新打开时删除它。这将有助于防止用户意外删除批处理文件。不过我喜欢这个主意! – mcfly
当然它只是'batfile = open('mybatfile.bat','wt')'写下你想要做的事情然后关闭它。 –
谢谢!这工作完美! – mcfly