我使用 Windows API CreateProcess() 创建一个进程。此函数返回的进程 ID 不在任务管理器中。 当我尝试使用 TerminateProcess() 终止此进程时。 GetLastError() 返回 5。使用 chrome 作为示例浏览器。
我的目标是创建一个浏览器进程,然后在身份验证后关闭浏览器。
我的示例代码是这样的:
int main()
{
wstring app{L"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"};
PROCESS_INFORMATION browserProcessInfo;
STARTUPINFO browserStartupInfo;
ZeroMemory(&browserStartupInfo, sizeof(browserStartupInfo));
ZeroMemory(&browserProcessInfo, sizeof(browserProcessInfo));
wstring cmdline;
cmdline = app + wstring{ { L" --new-windows" } };
bool bProcessCreated = CreateProcess(NULL,(LPWSTR) (cmdline.c_str()), NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS , NULL, NULL, &browserStartupInfo, &browserProcessInfo);
auto handle = OpenProcess(PROCESS_TERMINATE, FALSE, browserProcessInfo.dwProcessId);
auto terminateStatus = TerminateProcess(handle, 1);
auto errorNumber = GetLastError();
CloseHandle(browserProcessInfo.hProcess);
CloseHandle(browserProcessInfo.hThread);
}
这不是
CreateProcess
的问题。如果 Chrome 已经在运行,chrome
会在启动后立即退出。它只是告诉现有进程创建一个新窗口并退出。