0

我的 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()期望在这种情况下工作吗?可能是因为这是一个无法正常工作的控制台窗口吗?

4

0 回答 0