2

我有一个名为test.exe. 该程序是用 python/pyqt4 编写的。在代码的某个时刻,我想触发应用程序的重新启动,因此我需要创建一个独立于主进程运行的分离进程,以便触发程序并立即关闭当前正在运行的程序。

问题是,无论我如何尝试,它都不想工作。除了执行相同的 exe,我还尝试创建一个 .bat 文件,然后在超时后调用该 exe(我向 localhost 添加了一个 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 文件中替换为它,它可以工作test.exenotepad.exe有任何想法吗?

4

1 回答 1

0

我最终编写了另一个小 exe,它正在监视文件的出现(reset.txt)。重新启动时的主要exe是touching文件然后退出。第二个 exe 作为守护程序运行,当它看到文件时调用第一个 exe。

开放改进...

于 2013-05-15T23:25:46.520 回答