由于CreateProcess()
和GetLastError()
的返回值冲突,我有些困惑。当我以类似于下面的方式使用CreateProcess()
时,它成功并似乎完成了所需的任务。但是,GetLastError()
仍然返回Access is Denied。
如果访问被拒绝,为什么会完成任务。相反,如果CreateProcess()
成功,为什么GetLastError()
返回访问被拒绝?
还是我对GetLastError()
的使用不正确?我只应在CreateProcess()
返回失败值时使用它吗? (我对以下行为的辩解是,我认为安全比后悔更好)
SetLastError(0);
hello = CreateProcess(_T("C:\\Windows\\System32\\cmd.exe"),
_T("C:\\Windows\\System32\\cmd.exe /C ant debug"),
NULL,NULL,false,0,NULL,
_T("C:\\My\\Directory"),&siStartupInfo, &piProcessInfo);
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ALLOCATE_BUFFER
|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&errorText, 0, NULL);
AfxMessageBox(errorText);
这种行为正常吗?在
CreateProcess()
文档中,它提到GetLastError()
失败时使用CreateProcess()
,但没有提及相反的用法。不批评文档,只是想澄清一下。无论
CreateProcess()
中的第二个参数是否为NULL
,都会发生这种情况。也许与cmd.exe
权限有关?如果是这种情况,CreateProcess()
不应该失败吗?谢谢。 最佳答案
来自GetLastError
的文档
我认为您获得了有经验的结果,因为成功成功后,CreateProcess
不会设置GetLastError
返回的错误值。相反,您对GetLastError
的调用会返回由先前调用的另一个函数设置的错误
关于c++ - CreateProcess成功,但是GetLastError()返回拒绝访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11089825/