5

我正在尝试使用 CreateProcess(...) 运行一个进程并在单独的控制台窗口中独立运行它。

我可以使用 system("...") 函数来实现这一点,但我更喜欢 CreateProcess,因为它让我可以指定环境和工作目录、获取进程的句柄以及在需要时通过管道传输标准输入/输出至。

我在互联网上找到的只是逆问题,即人们拥有额外的控制台窗口并想要摆脱它们!在早期版本的 Windows 中,打开并显示新的控制台窗口似乎是正常行为?

现在,即使我运行“cmd.exe /c ...”,我也无法获得额外的窗口

我尝试使用 STARTF_USESHOWWINDOW 标志,但没有成功。

有人遇到过这个问题吗?

PS .:显示GUI窗口,例如。notepad.exe 会正常出现。

这是我的代码(本质上)

PROCESS_INFORMATION processInfo;
STARTUPINFOA startupInfo;
ZeroMemory(&startupInfo,sizeof(startupInfo));
startupInfo.dwFlags |= CREATE_NEW_CONSOLE;
startupInfo.dwFlags |= DETACHED_PROCESS;
ok&=CreateProcessA( NULL,
    const_cast<char*>(comand.c_str()), // safe for CreateProcessA
    NULL, NULL, TRUE, NULL, NULL, NULL,
    &startupInfo, &processInfo);

我正在尝试运行 C:/Windows/system32/cmd.exe /c help 程序运行,我可以从管道读取输出。还是没有窗户。

4

2 回答 2

16
于 2013-09-16T14:52:10.797 回答
2

调用CREATE_NEW_CONSOLEdwCreationFlags传入CreateProcess。我没有测试过,但我怀疑这会强制创建一个控制台窗口(甚至可能是非控制台进程?)你也可以使用DETACHED_PROCESS它,它只是从父控制台中分离出来的。

于 2013-02-19T13:33:47.050 回答