使用 TerminateProcess 终止“mstsc.exe”进程时出现错误代码(5)访问被拒绝

Hen*_*nry 5 c++ windows winapi

我使用该CreateProcess()函数使用“mstsc.exe”启动 rdp 客户端应用程序。之后,我想终止它,所以我使用了TerminateProcess()函数,但它失败了,错误代码为 5。如果我用“notepad.exe”替换“mstsc.exe”,终止函数就起作用了。代码如下:

TCHAR szCommandLine[] = TEXT("mstsc.exe");
STARTUPINFO si = {sizeof(si)};
PROCESS_INFORMATION pi;
BOOL bResult = CreateProcess(NULL, szCommandLine, NULL, NULL,
    FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
::Sleep(3000);
if (TerminateProcess(pi.hProcess, 0) == 0) {
printf("failed: %d", GetLastError());
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助解释并解决它吗?我观察到的是,pi返回的 pid 与在 taksmanager 或“Process Explorer”中观察到的进程“mstsc.exe”的 ID 不同。

Rob*_*ker 3

您的主机进程是 32 位的,并且您在 64 位 Windows 上运行吗?

如果是这样,您将调用 32 位 mstsc,并且它会生成 64 位版本,因此 PID 不同。查看此线程