什么意思?exe本应该生成文件 但是没生成?

解决方案 »

  1.   

    是的,我在程序1中调用了.exe,目的是生成一个文件A,程序1继续调用文件A,结果就是还没生成A,程序就继续运行了。我用waitforsingleobject,还是不对 ,稍等我把我的代码敲上来
      

  2.   

    GetExitCodePrecess()
    STILL_ACTIVE
      

  3.   

    if(m_CODExeList.GetCount()>0)
    {
    CString strExeDir = "D:\\计划生成软件\\1000_1317_20100417";
    DeleteDirectory(strExeDir); //每次调用exe之前清空文件夹,否则每次都需要查询当前生成的文件

    strExeDir = "D:\\计划生成软件\\1000_1317_20100417\\*.*";
    STARTUPINFO si = {sizeof(si)};
    PROCESS_INFORMATION p;
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = TRUE;
    TCHAR cmdline[]=TEXT("D:\\计划生成软件\\OBSTRACK.exe");
    DWORD dwExitCode; BOOL bRet = ::CreateProcess(NULL,cmdline,NULL,NULL,FALSE,CREATE_NO_WINDOW,NULL,NULL,&si,&p);
    if (bRet)
    {
    ::CloseHandle(p.hThread);
    ::WaitForSingleObject(p.hProcess,INFINITE); //等待子进程的退出
    ::GetExitCodeProcess(p.hProcess,&dwExitCode);//获取子进程的退出码
    ::CloseHandle(p.hProcess);
    }
    else
    {
    ::CloseHandle(p.hProcess);
    ::CloseHandle(p.hThread);

    }
    }
    //--- 查找当前生成的文件
    CList<CString, CString> m_CodExeFileList;   //存放.exe生成的文件
    strExeDir = "1000_1317_20100417\\*.*";
    int nIndex= strExeDir.ReverseFind('\\');
      

  4.   

    就是后面继续执行查找时,找不到.exe 生成的文件
      

  5.   

    生成的文件,flush一下,确认文件生成了,被调用的程序在退出
      

  6.   

    TCHAR cmdline[]=TEXT("D:\\计划生成软件\\OBSTRACK.exe");
    是不是
    TCHAR cmdline[]=TEXT("D:\\计划生成软件\\OBSTRACK.exe  新文件名");
      

  7.   

    创建进程后先sleep一下,让其他进程获取CPU控制权运行;关于文件没生成的问题有好多种处理方法:使用事件在进程间通知,文件生成后通知事件,主进程等待事件就可以了;还有一种就是不断循环查找,没找到就sleep一下,直到查找到目标文件为止
      

  8.   

    waitforsingleobject等待进程.exe退出后再继续执行。
      

  9.   

    waitforsingleobject只能等待句柄的。我推荐两种方法吧。
    第一种:你可以使用共享内存的方法,等待进程可以查询共享内存的完成标识符。工作进程一旦完成就改变标识符。
    第二种:查询进程可以使用CFindFile查询文件是否存在,你工作进程可以把没有输出完成的文件改成  *.tmp文件,真正完成了才是自主的后缀名格式。
      

  10.   


    问题不在那里,因为调用的.exe生成的文件存放目录.exe是默认的。。
      

  11.   


    我用waitforsingalobject等了,是不是我用的不对??
    谢谢~~
      

  12.   

    支持,通过共享内存,比较方便,两边都是你开发的,为什么还要用文件,磁盘读写比内存读写,不是慢了一点点
    被调用的.exe不是我们开发的,是别人给的,没有内部代码
      

  13.   

    实在不行,你在加一句while(true)
    {
      if(文件已经存在)
        break;
    }
    //在做操作文件
      

  14.   


    第二种方法,只能检测到是不是生成了,但是不能保证文件生成呀
    第一种方法,有没有关于内存共享的资料或者书籍推荐??
    谢谢你们,第一次发帖,感觉大家好好,这么热心~~谁说不能保证,你查询到得文件后缀是tmp的话就是没生成完成啊,非tmp的才是生成完成的呀
      

  15.   

    http://bbs.csdn.net/topics/10332498
      

  16.   


    灵异事件啊,我用cfilefind.findfile.明明没有生成文件,它却返回1.。。太诡异了吧??
      

  17.   


    灵异事件啊,我用cfilefind.findfile.明明没有生成文件,它却返回1.。。太诡异了吧??
    呵呵,一般来说,计算机不会骗人的。我以前也疑神疑鬼的,怀疑过系统,怀疑过编译器,后来证明,除了一次是编译器bug外,剩下的都是我自己错了
      

  18.   

    终于知道为什么啦!!因为在Createprocess前当前路径被修改了,所以虽然进程创建成功,即返回值是1,但是并不能生成文件!!!