2013-12-17 67 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]) 

我認爲,將努力重啓