Boost 进程在新窗口中打开进程 (Windows)

Posted

技术标签:

【中文标题】Boost 进程在新窗口中打开进程 (Windows)【英文标题】:Boost process open process in new window (Windows) 【发布时间】:2021-12-14 20:11:56 【问题描述】:

我正在尝试设计一个使用工作进程的程序 - 这只是一个用 C++ 编写的不同程序。

我像这样启动一个工作进程:

auto worker = boost::process::child("./worker.exe");
worker->detach();

问题在于,工作进程正在将信息输出到生成它们的同一命令行窗口。这使程序的输出变得混乱。理想情况下,我希望每个进程都在自己的窗口中运行。

这可以使用 boost::process 吗?我只找到了关于隐藏窗口的信息。

我使用的是 Windows 和 Visual Studio 2019。

谢谢

【问题讨论】:

【参考方案1】:

ITNOA

正如您在Boost::process hide console on windows 中看到的,您可以创建新模式来创建进程。

CreateProcessA function system call,通过帮助创建标志来展示如何使用新控制台创建新进程:CREATE_NEW_CONSOLE(感谢Using multiple console windows for output)

你可以编写如下代码

struct new_window
:   ::boost::process::detail::handler_base

    // this function will be invoked at child process constructor before spawning process
    template <class WindowsExecutor>
    void on_setup(WindowsExecutor &e) const
    
        e.creation_flags = ::boost::detail::winapi::CREATE_NEW_CONSOLE_;
    
;

为了使用它,你可以像下面这样写

::boost::process::child ch("./worker.exe", new_window);

【讨论】:

感谢您的回答。什么是#includes 让这个工作? 没关系,这是#include 非常感谢,效果很好!作为奖励,您能告诉我 env 参数的用途吗?在我的应用程序中没有它,它工作得很好。 不重要,我只是明确指定流程环境。 (我删除它,以尽量减少答案)

以上是关于Boost 进程在新窗口中打开进程 (Windows)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 python 脚本在新窗口上打开批处理

在新进程中运行时窗口标题中的“无响应”

用js window.open在新窗口中打开链接,关于设置URL地址设置为变量的问题

使用“nofollow/赞助”时,window.open 在新窗口而不是新选项卡中打开

js 用window.open(参数) 打开新窗口,在新窗口怎么获取传过来的参数

window.open(url, windowname, opts) 在新选项卡中打开,而不是在 Firefox 中打开新窗口