我有一个名为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.exe
,start.bat
它看起来像这样:
ping 127.0.0.1 > "bat.txt"
start "" "%~dp0test.exe"
如果我在我的 bat 文件中替换为它,它可以工作test.exe
。notepad.exe
有任何想法吗?