如何使用TerminateProcess()关闭控制台窗口

时间:2018-11-23 22:08:08

标签: c++ winapi console-application shellexecuteex

我的C ++应用程序将.cmd文件作为子进程启动,如下所示:

SHELLEXECUTEINFOA execInfo = {0};
execInfo.cbSize = sizeof(execInfo);
execInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NOASYNC;
execInfo.lpVerb = "open";
execInfo.lpFile = "test.cmd";
execInfo.lpDirectory = "C:\\some\\directory";
execInfo.nShow = SW_SHOWNORMAL;
BOOL result = ShellExecuteExA(&execInfo);

脚本test.cmd运行一个运行很长时间的控制台模式.NET应用程序,它看起来类似于:

@echo off
echo Starting a long task...
dotnet.exe runforhours.dll

ShellExecuteExA()返回我的C ++应用程序时,execInfo.hProcess中的进程句柄被保存以备后用。想法是使用该进程句柄关闭子进程(脚本+ exe)。

但是当我尝试关闭它时,似乎什么也没发生。控制台窗口和长期运行的.NET应用程序都可以愉快地继续运行。这是对TerminateProcess()的调用:

TerminateProcess(child_process_handle, 1);
CloseHandle(child_process_handle);

在这种情况下,应该TerminateProcess()工作吗?可能是因为这是一个控制台窗口无法正常工作?

0 个答案:

没有答案