我使用CreateProcess()函数通过“mstsc.exe”启动rdp客户端应用程序。在那之后,我想终止它,所以我使用TerminateProcess()函数,但是失败,错误代码为5。如果我将“mstsc.exe”替换为“notepad.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());
}

谁能帮助解释和解决它?
我观察到的是,返回的pi的pid与在taksmanager或“Process Explorer”中观察到的进程“mstsc.exe”的ID不同。

最佳答案

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

如果是这样,您正在调用32位的mstsc,并且它生成了64位的版本,因此使用了不同的PID。查看this thread

08-06 00:15