2013-05-15 61 views
2

我有一個名爲test.exe的程序。該程序是用python/pyqt4編寫的。在代碼的某一點,我想觸發應用程序的重新啓動,因此我需要創建一個獨立於主進程獨立運行的進程,以便啓動程序並立即關閉當前運行的進程。如何從.exe文件調用進程

問題是,無論我如何嘗試,它都不想工作。而不是執行相同的exe文件,我也嘗試創建一個.bat文件,然後在超時後調用exe文件(我向本地主機添加了一個ping)。

如果我嘗試執行一些像notepad.exe副本一樣的其他程序,它沒有問題,但我無法找到解決方案,以重新啓動應用程序。這裏是我的測試代碼:

import os 
import sys 
import subprocess 

from PyQt4 import QtGui, QtCore 

if getattr(sys, 'frozen', False): 
    ROOT_PATH = os.path.dirname(os.path.abspath(sys.executable)) 
elif __file__: 
    ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) 


class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 
     self.initUI() 

    def initUI(self): 
     qbtn = QtGui.QPushButton('Quit', self) 
     qbtn.clicked.connect(self.btn_clicked) 
     qbtn.resize(qbtn.sizeHint()) 
     qbtn.move(50, 50)  

     self.setGeometry(300, 300, 250, 150) 
     self.setWindowTitle('Quit button')  
     self.show() 

    def btn_clicked(self): 
     p = QtCore.QProcess() 
     p.setWorkingDirectory(ROOT_PATH) 
     p.startDetached("start.bat") 
     sys.exit(0) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

exe使用pyinstaller編譯和我的最終位置我有text.exestart.bat看起來像這樣:

ping 127.0.0.1 > "bat.txt" 
start "" "%~dp0test.exe" 

如果我在我的bat文件與notepad.exe替換test.exe有用。 任何想法?

+0

不應該是'%〜DP0 \ test.exe的「'(失蹤斜線)?如果我點擊它 – npocmaka

+0

蝙蝠工作正常。 –

回答

0

我最終寫了另一個小文件,它正在監視要顯示的文件(reset.txt)。重新啓動時的主要exe文件是touching然後該文件退出。第二個exe作爲守護進程運行,當它看到文件調用第一個exe時。

公開賽改進...

相關問題