大家都知道Qt与外部程序通讯的其中一种方式:QProcess。
最近需要使用不同参数将一个EXE启动多个进程,遇到了启动不成功的情况,在此做个记录。
首先说最优解,使用QDir设置应用程序当前工作目录:
#include <QDir>// 设置应用程序当前目录
QString appDir = QApplication::applicationDirPath();
QDir::setCurrent(appDir + "/TestDir/Dir01/");QProcess process;
// param1: 应用程序名称
// param2: 应用程序执行参数
process.startDetached("Test.exe", QStringList() << "param");// 恢复应用程序当前目录
QDir::setCurrent(appDir);
其次也可以使用QProcess的方法setWorkingDirectory()方法,但是实测有时有问题
QString appDir = QApplication::applicationDirPath();QProcess process;
// QProcess会在设置的目录下执行Test.exe
process.setWorkingDirectory(appDir + "/TestDir/Dir01/");
process.startDetached("Test.exe", QStringList() << "param");
再者也可以使用QProcess的startDetached()方法的第三个参数
QString appDir = QApplication::applicationDirPath();QProcess process;
// param1: 应用程序名称
// param2: 应用程序启动参数
// param3: Test.exe会在此路径下启动
process.startDetached("Test.exe", QStringList() << "param", appDir + "/TestDir/Dir01/");
后面两个方法测试过程中会出现启动不成功的情况。