我在一个通过CreateProcess调用另一个应用程序的应用程序上工作。我在Win7 64位上。被叫app是一个通过管道接收数据的控制台。调用代码如下所示:
STARTUPINFOA si;
PROCESS_INFORMATION pi;
GetStartupInfoA(&si);
memset( &si, 0, sizeof(STARTUPINFOA) );
memset( &pi, 0, sizeof(pi) );
si.cb = sizeof(STARTUPINFOA);
char cmdline[MAX_PATH];
sprintf(cmdline,"\"%s\" %s",AppToCallName,PipeName);
BOOL bRet = CreateProcessA(NULL,cmdline,NULL,NULL,FALSE,CREATE_NEW_CONSOLE|CREATE_BREAKAWAY_FROM_JOB,NULL,NULL,&si,&pi);
在我的电脑上(我尝试了两台),它有效。在其他的,它返回(bRet =)FALSE然后GetLastError()返回5,这意味着ACCESS_DENIED。
我无法弄清问题在哪里。坏的是它对我有用,所以我无法调试它!
我的设置是:
Win7 Pro 64位SP1
VStudio 2005 SP1
(使用的编译器:英特尔C ++ 9.1
如果您需要,我很乐意提供更多设置信息!
有什么想法吗?
答案 0 :(得分:0)
CreateProcess
使用与调用进程相同的权限,如果它尚未正确初始化,它也将终止进程,因此即使CreateProcess
返回成功,您也应该等待并验证进程是否已启动。但是,您的访问被拒绝问题可能与您的调用进程没有对您尝试在目标计算机上启动的任何应用程序执行或写入权限相关。
除了功能成功的GetLastError
之外,请检查GetExitCodeProcess
,因为这可能是您的下一个问题。
另作参考:http://msdn.microsoft.com/en-us/library/ms682425(v=vs.85).aspx