首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++和Qt:我如何启动一个在调用者应用程序结束后仍然存在的应用程序?

C++和Qt:我如何启动一个在调用者应用程序结束后仍然存在的应用程序?
EN

Stack Overflow用户
提问于 2021-07-12 20:37:59
回答 1查看 61关注 0票数 1

这就是我想要做的。

我有一个脚本,当前刚开始打印一条消息。等待5秒,并打印另一条消息,然后要求用户按任意键结束。

我有一个Qt应用程序,它需要调用这个脚本,然后退出。我希望打开控制台窗口来显示脚本文本,并且这个新过程能够在Qt应用程序完成后继续。

在windows中,我的脚本叫做"update.bat“。

所以我试过了:

代码语言:javascript
运行
复制
QProcess::startDetached("update.bat"); 
QCoreApplication::quit();

但是控制台(windows one)不会打开(所有输出都是QtCreator格式),而且在应用程序结束后肯定不会继续。

有没有办法用Qt做到这一点呢?

如果可能的话,我不想依赖windows的CreateProcess,而是使用Qt解决方案。

编辑:

我也尝试过setCreateProcessArgumentModifier和用命令/k启动update.bat脚本,结果都是一样的。输出被重定向到QtCreator控制台,并且当在Qt之外执行应用程序时什么也不会发生(这都是在您按下按钮时发生的)。

代码语言:javascript
运行
复制
    QProcess p;
//    QProcess process;
//    process.setCreateProcessArgumentsModifier([] (QProcess::CreateProcessArguments *args)
//    {
//        args->flags |= CREATE_NEW_CONSOLE;
//        args->startupInfo->dwFlags &= ~STARTF_USESTDHANDLES;
//        args->startupInfo->dwFlags |= STARTF_USEFILLATTRIBUTE;
//        args->startupInfo->dwFillAttribute = BACKGROUND_BLUE | FOREGROUND_RED
//                                           | FOREGROUND_INTENSITY;
//    });
    p.startDetached("cmd.exe",QStringList() << "/k" << "update.bat");
EN

回答 1

Stack Overflow用户

发布于 2021-07-12 22:22:53

所以这不是我在想办法。这更像是我在做搭桥手术。

基本上,使用system works启动脚本。但我设法让它工作的方式是这样的:

  1. 从单独的线程调用系统函数。否则,应用程序将锁定所有内容(包括外部杀死它),直到系统中运行的所有内容完成为止。你可以使用QThread来实现这一点。

  1. 使用taskkill: taskkill/im App.exe

终止应用程序作为脚本的第一步

这对于一些事情来说并不理想,主要是我在几个地方看到调用系统不是很安全。但是,因为脚本本身是由应用程序生成的,所以在我的例子中,它对于我的目的来说已经足够好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68347503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档