CreateProcess在某些计算机上工作,而在其他计算机上不起作用.为什么

CreateProcess works on some computers, not on others. Why?

本文关键字:计算机 其他 不起作用 为什么 工作 CreateProcess      更新时间:2023-10-16

我在一个通过CreateProcess调用另一个应用程序的应用程序上工作。我用的是64位的Win7。被调用的应用程序是一个通过管道接收数据的控制台。调用代码看起来像这样:

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

  • )

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

任何想法?

CreateProcess使用与调用进程相同的权限,如果进程没有正确初始化,它也会终止进程,所以即使CreateProcess返回成功,您也应该等待并验证进程启动。然而,您的访问拒绝问题可能与您的调用进程没有执行或写入权限有关,无论您试图在目标机器上启动的是什么应用程序。

除了GetLastError,当功能成功时检查GetExitCodeProcess,因为这可能是你的下一个问题。

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