近期开发中遇到了从一个程序带参数启动另一个程序的需求。现简单记录于此,以防忘记。
QProcess* p = new QProcess(this);
QString prog = "Target.exe";
QStringList args;
args << "this is the args";
p->execute(prog, args);
其中“Target.exe”为被调用的程序执行文件名称,如果不在同一目录需要加上路径。字符串是传递过去的参数,放到一个QStringList中,可以传递多个参数。然后我们就能启动目标程序,并在目标程序的main函数中读取到传过去的参数。
读取参数时需要注意一个问题。我们知道在主函数
int main(int argc, char *argv[])
中,argc为参数个数,argv为参数列表。默认情况下argc = 1,argv[0] 为程序执行文件的全路径。所以当我们传入参数后,argc = 参数个数 + 1,而我们传入的参数是从argv[1]开始的,argv[0]依然是执行文件的全路径。
另外一个需要注意的问题是权限,没有管理员权限的程序无法启动需要管理员权限的程序,执行此段代码时会没有反应。此时需要在启动的程序中加上需要管理员权限,或者手动以管理员权限运行。