如何为两个单独的 CreateProcess() API 调用打开单独的命令提示符控制台

Posted

技术标签:

【中文标题】如何为两个单独的 CreateProcess() API 调用打开单独的命令提示符控制台【英文标题】:How to open separate command prompt consoles for two seperate CreateProcess() API calls 【发布时间】:2014-12-05 09:27:11 【问题描述】:

我有一个 caller.EXE,我在其中执行了 2 次这样的“CreateProcess() API 调用。两个 CReateProcess() API 都在尝试启动控制台应用程序 EXE。

Caller.cpp (Caller.EXE) has teh following code in it::
...................
..................
CReateProcess( Callee_1) // For launching a console EXE which starts running in the same CMD prompt window where I've the main "CAller.EXE" running.
..............
<Few lines of C++ logic>
........
CReateProcess(Callee_2) // For launching another console EXE .

现在的问题是我希望第二个 CreateProcess(Callee_2) 调用实际启动不同的命令提示符,但这里发生的是第二个 CreateProcess(Callee_2) 调用没有启动 anotehr CMD 提示符。相同的 CMD 提示符正在执行其中的Callee_1

我在我的调用者代码中看到 CreateProcess() 两次都成功。

我想要第二个CreateProcess(Callee_2) 呼叫实际上 启动不同的命令提示符。我该如何做到这一点?我想我 应将其作为输入参数的一部分提供给 CreatyeProcess(Callee_2) 来电。

【问题讨论】:

如何标记c 我不太清楚你想要完成什么,你想真正启动cmd.exe吗?还是您只是想让系统为您打开一个窗口,用于新进程的标准输出? 两个 CReateProcess() API 调用都在尝试启动控制台应用程序 EXE。因此,我希望打开 2 个不同的 CMD 控制台,其中“Callee_1 和 Callee_2”将它们的控制台输出转储到 2 个单独的 CMD 提示符(控制台)中。 【参考方案1】:

我对 Windows 或 MSDN 不是很了解,但据我所知,

CReateProcess( Callee_1)

实际上应该是CreateProcess(),取一个参数DWORD fdwCreate,在哪里,

CREATE_NEW_CONSOLE

可以用来指定新进程应该有一个新的控制台,而不是继承父进程的控制台。

也许this链接对你有帮助。

【讨论】:

我观察到 CREATE_NEW_CONSOLE 的行为不一致。如果我在第一个 CreateProcess(Callee_1) 中使用它,它确实会创建一个新控制台,但它不在第二个 CreateProcess(CALlee_2) 调用中?可以打开的控制台数量是否有限制? @codeLover 正如我所说,我对此不太了解,所以我不确定,但this 可能会对您有所帮助。

以上是关于如何为两个单独的 CreateProcess() API 调用打开单独的命令提示符控制台的主要内容,如果未能解决你的问题,请参考以下文章

如何为每个 QTableView 单元格支持两个单独的可双击值?

如何为同一个类对象的成员函数保留单独的变量副本?

如何为 GET 和 POST 编写单独的视图

Filebeat/ELK中如何为不同的日志定义单独的索引?

Spring Security OAuth2:如何为两类用户提供两个单独的登录链接?

如何为每一行添加单独的滚动,我想在 ag-grid-react 的嵌套级别排序