CreateProcess在某些计算机上工作,而在其他计算机上不起作用.为什么
CreateProcess works on some computers, not on others. Why?
我在一个通过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
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- GlobalAlloc而不是其他分配方法
- QT.如何使用QTNetwork在网络上查看其他计算机
- Visual C 程序不在其他计算机中运行
- 在其他计算机 MVCP100d 中打开 EXE 需要什么文件
- 将 c++ 游戏部署到其他窗口计算机
- ShellExecute 不适用于其他计算机
- C++-发送的请求未到达其他计算机
- struct-statc++未在其他计算机中编译
- 将我的DirectX应用程序移植到其他计算机
- Visual C++2010-将项目复制到其他计算机后出现多个未解决的外部错误