CreateProcess 错误代码2

tangtxtx2 2012-05-26 04:33:15
STARTUPINFO si;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
PROCESS_INFORMATION pi;
if(CreateProcess("calc.exe"," -i",0,0,0,0,0,0,&si,&pi))
{
MessageBox(0,"成功",0,0);
}
else
{
MessageBox(0,"失败",0,0);
}
上面的代码在空工程新建的win32工程中工作正常
但在MFC 始终返回错误2 不知道大家遇到没? 代码完全一样的
环境:calc.exe和主程序放在同一目录下 CreateProcess是CreateProcessA 系统是xp sp0
win32程序提示成功 mfc程序提示失败
...全文
3654 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjeson 2013-07-23
  • 打赏
  • 举报
回复
遇到同样的问题,调试的时候我也感觉奇怪,怎么GetCurrentDirectory获得的路径是CFileDialog的路径,说明操作的时候尽量使用绝对路径防止不可控的因素。
Eleven 2012-05-26
  • 打赏
  • 举报
回复
用绝对路径
sryteawrt 2012-05-26
  • 打赏
  • 举报
回复
最好获得程序绝对路径。。再CreateProcess
tangtxtx2 2012-05-26
  • 打赏
  • 举报
回复
真实原因:使用CFileDialog选择文件了以后会在其内部调用SetCurrentDirectory设置被选择文件的目录为当前路径,如果文件和程序不在同一路径,那么CreateProcess使用相对路径就一定找不到可执行程序了。
解决方案:任何时候都使用可执行文件的绝对路径来CreateProcess它
tangtxtx2 2012-05-26
  • 打赏
  • 举报
回复
找到原因了 一旦调用了CFileDialog并选择了要打开的文件 在此之后CreateProcess就会诡异返回2
详情 我会再探索一下再发上来

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧