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

我使用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());
}

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

解决方法:

您的主机进程是32位还是在64位Windows上运行?

如果是这样,你正在调用32位mstsc并且它产生一个64位版本,因此产生不同的PID.查看this thread

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...