如何从.exe文件调用进程

时间:2013-05-15 14:26:36

标签: batch-file exe executable pyinstaller

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

问题在于,无论我如何尝试,它都不想工作。我没有尝试创建一个.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()

使用pyinstaller编译exe,在我的最终位置,我有text.exestart.bat,如下所示:

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

如果我在我的bat文件中将test.exe替换为notepad.exe则可行。 有任何想法吗?

1 个答案:

答案 0 :(得分:0)

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

开放改善......