【发布时间】:2011-09-08 16:58:21
【问题描述】:
我正在开发一个通过 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
如果您需要,我很乐意提供更多设置信息!
有什么想法吗?
【问题讨论】:
-
什么类型的应用程序触发了 ACCESS_DENIED?在这些情况下,命令行上有什么?另外,您是否以提升的用户身份运行代码?我建议不要这样做,因为如果你这样做,你自己不会发现这个错误......
-
触发 ACCESS_DENIED 的应用程序是一个简单的控制台应用程序,它将(将)通过命名管道从调用应用程序接收数据。管道创建是正确的。命令行如下所示: "\"MyConsoleApp.exe\" ThePipeName" 调用者和被调用的应用程序都位于同一目录中。
-
另外,我们在这里都有管理员权限。即使是那些无法在计算机上运行我的应用程序的人。
标签: c++ windows-7 intel access-denied createprocess