我工作的应用程序通过CreateProcess调用另一个应用程序。我在Win7 64位。被调用的应用程序是一个通过管道接收数据的控制台。调用代码如下所示:CreateProcess适用于某些计算机,而不适用于其他计算机。为什么?
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的临64位SP1
VStudio 2005 SP1
(编译器用于:英特尔C++ 9.1
我将很高兴提供更多的设置信息,如果你需要它!
有什么想法?
什么类型的应用程序触发ACCESS_DENIED?在这些情况下,命令行上有什么?另外,你是否以高级用户身份运行代码?我会建议不要这样做,因为如果你这样做,你就不会发现这个错误... –
触发ACCESS_DENIED的应用程序是一个简单的控制台应用程序,它将(将)通过命名管道从调用应用程序接收数据。管道创建是正确的。命令行如下所示:“\”MyConsoleApp.exe \“ThePipeName”调用者和被调用的应用程序位于同一个目录中。 –
另外,我们在这里都有管理员权限。即使那些无法在那里运行我的应用程序的电脑。 –