一、在应用程序中打开外部程序
QString qsPath = QCoreApplication::applicationDirPath();
#ifdef _WIN32
qsPath += + "/user.exe";
qsPath.replace("/", "\\");
QProcess::startDetached(qsPath, QStringList());
#else // _WIN32
qsPath += + "/user.app";
QProcess proc;
proc.start(qsPath, QStringList());
proc.waitForFinished(-1);
#endif
1.、注意windows下QCoreApplication::applicationDirPath() 获取的路径是exe所在目录,
而mac下的程序会被打成
一个包,获取的目录是包内部的exe目录,需要显示包,然后吧外部的包放到包内部的exe目录中,
windows下需要把dll之类的全拷贝到exe目录下
2、windows下如果没有太多公用dll,建议单独建一个目录,方便以后进行升级之类的操作
这种方式会导致打开的进程会变为当前进程的字进程
二、windows下bat命令打开外部程序
1、打开的进程和当前的进程为独立进程
// 选取一个能写入位置的路径
QString batFile = QStandardPaths::writableLocation(QStandardPaths::HomeLocation)+ QDir::separator() + "StartDaemon.bat";
// 删除旧的文件
if (QFile(batFile).exists())
{
QFile(batFile).remove();
}
// 写入新的文件
QFile file(batFile);
if (file.open(QFile::ReadWrite))
{
QString strParam = QString("@echo off \n start /d \"%1\" HiDaemond.exe \"%2\" \n exit").arg(QCoreApplication::applicationDirPath()).arg(QFileInfo(QCoreApplication::applicationFilePath()).fileName());
file.write(strParam.toLocal8Bit());
file.close();
// 执行脚本
QProcess p;
p.start("cmd.exe", QStringList() << "/c" << batFile);
if (p.waitForStarted())
{
p.waitForFinished(2000);
return;
}
2、解析命令
@echo off
start /d "路径" 启动程序名 "需要传入的参数"
exit
(1)、传入的参数对应argv[1], QT中对应QApplication::arguments().at(1)
(2)、传入参数可以不需要