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程序提示失败

解决方案 »

  1.   

    找到原因了 一旦调用了CFileDialog并选择了要打开的文件 在此之后CreateProcess就会诡异返回2
    详情 我会再探索一下再发上来
      

  2.   

    真实原因:使用CFileDialog选择文件了以后会在其内部调用SetCurrentDirectory设置被选择文件的目录为当前路径,如果文件和程序不在同一路径,那么CreateProcess使用相对路径就一定找不到可执行程序了。
    解决方案:任何时候都使用可执行文件的绝对路径来CreateProcess它
      

  3.   

    最好获得程序绝对路径。。再CreateProcess
      

  4.   

    遇到同样的问题,调试的时候我也感觉奇怪,怎么GetCurrentDirectory获得的路径是CFileDialog的路径,说明操作的时候尽量使用绝对路径防止不可控的因素。