2013-12-17 69 views
0

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

我的步骤:

  1. 点击 “更新”(我有这样的设置)
  2. 关闭当前窗口/程序
  3. 下载新的exe文件(覆盖当前的EXE)
  4. 打开新下载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() 

回答

2

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

+0

是否可以在Python代码(即时)中创建批处理文件?这样它可以创建批处理文件,然后在重新打开时删除它。这将有助于防止用户意外删除批处理文件。不过我喜欢这个主意! – mcfly

+0

当然它只是'batfile = open('mybatfile.bat','wt')'写下你想要做的事情然后关闭它。 –

+0

谢谢!这工作完美! – mcfly

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

我认为,将努力重启