【提问】QProcess::startDetached打开bat文件一闪而过问题

MikasaHa 2017-11-08 09:55:06
项目需要用QT程序打开另外一个批处理文件(bat),并且要停留在控制台界面上,效果和手动双击打开一样就行。

我使用QProcess::startDetached打开时遇到比较奇怪的问题:

1. 当bat路径中不存在左括号“(”时,无论有没有空格都能打开控制台;
2. 当bat路径中存在左括号“(”时,且存在空格能打开控制台;
3. 当bat路径中存在左括号“(”时,且不存在空格控制台一闪而过。

程序如下:

//QString runPath = "D:\\test\\test.bat"; // 控制台打开成功
//QString runPath = "D:\\test( test\\test.bat"; // 控制台打开成功
//QString runPath = "D:\\test(test\\test.bat"; // 控制台一闪而过
QFileInfo exeFile(runPath);
if (exeFile.isFile())
{
QString workDir = exeFile.absolutePath().replace("/", "\\");
qint64 pid = 0;

qDebug() << runPath;
qDebug() << workDir;
bool pass = QProcess::startDetached(runPath, QStringList(), workDir, &pid);
if (!pass) // 返回都是true
{
qDebug() << "fail";
return ;
}
}
return;


尝试过用system打开bat文件,发现带括号也会一闪而过,神烦。。。

有没有大神遇到过类似问题?
...全文
1009 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42390470 2019-08-09
  • 打赏
  • 举报
回复
遇到同样的问题。 用startDetached想打开控制台界面。 官方文档说5.8之后。 startDetached不再打开控制台界面, 用了里面一个例子 说是这样可以打开控制台界面 但试了没用 QProcess p; p.setProgram("cmd.exe"); p.setArguments({"/k", "echo", "Hello from Qt!"}); p.setCreateProcessArgumentsModifier([] (QProcess::CreateProcessArguments *args) { args->flags &= ~CREATE_NO_WINDOW; }); p.startDetached(); https://bugreports.qt.io/browse/QTBUG-57687 请问楼主解决了嘛!求问 (没水。 管理员别删了)
MikasaHa 2017-12-27
  • 打赏
  • 举报
回复
如果是正常的路径用哪种方式都没有问题,我上面的问题是路径中带有左括号就有问题。比如: runPath = "D:\\test\\test(test).bat";
引用 4 楼 xh286286 的回复:
直接调用 cmd 即可 QString runPath = "C:\\Windows\\System32\\cmd.exe"; QStringList sss; sss << "/k" << " D:\\test\\test.bat"; bool pass = QProcess::startDetached(runPath, sss);
xh286286 2017-11-16
  • 打赏
  • 举报
回复
另外 路径里有空格的 需要前后加 引号。 QString runPath = "\"”D:\\test( test\\test.bat\""
xh286286 2017-11-16
  • 打赏
  • 举报
回复
直接调用 cmd 即可 QString runPath = "C:\\Windows\\System32\\cmd.exe"; QStringList sss; sss << "/k" << " D:\\test\\test.bat"; bool pass = QProcess::startDetached(runPath, sss);
MikasaHa 2017-11-13
  • 打赏
  • 举报
回复
没有人遇到过这问题吗?
MikasaHa 2017-11-10
  • 打赏
  • 举报
回复
MikasaHa 2017-11-08
  • 打赏
  • 举报
回复
测试用的test.bat内容如下:

echo "测试bat文件"
pause

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧