0

我在一个通过 CreateProcess 调用另一个应用程序的应用程序上工作。我在Win7 64位。被调用的应用程序是一个通过管道接收数据的控制台。调用代码如下所示:

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

  • (使用的编译器:Intel C++ 9.1

如果您需要,我很乐意提供更多设置信息!

任何的想法?

4

1 回答 1

0

CreateProcess使用与调用进程相同的权限,如果它没有正确初始化,它也会终止该进程,因此即使CreateProcess返回成功,您也应该等待并验证启动的进程。但是,您的访问被拒绝问题可能与您的调用进程对您尝试在目标计算机上启动的任何应用程序没有执行或写入权限有关。

除了GetLastError函数何时成功检查之外GetExitCodeProcess,这可能是您的下一个问题。

也供参考: http: //msdn.microsoft.com/en-us/library/ms682425 (v=vs.85).aspx

于 2011-09-08T17:39:17.377 回答