如何为两个单独的 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 单元格支持两个单独的可双击值?