当一个程序(a.exe)启动时启动另外一个程序(b.exe)环境:WIN2000英文版
代码如下:
if (CreateProcess( "c:\b.exe",
NULL,
NULL,
NULL,
true,
           CREATE_DEFAULT_ERROR_MODE|CREATE_NO_WINDOW,
NULL,
WorkingDir,
                  &startInfo,
                  &processInfo ) == false)
return false;现象:重启计算机后第一次运行a.exe报下面错误(日志中记录):
The application, , generated an application error The error occurred on 08/06/2002 @ 15:28:26.240 The exception generated was c0000005 at address 77FC9114 (_eFSQRT) b.exe程序关闭退出A.EXE程序再次运行
正常另,该操作再win2000中文版中VC6下调试运行正常
这种现象是不是跟CreateProcess有关??

解决方案 »

  1.   


    改为
    "c:\\b.exe"
    试试,现象还能重现吗?
      

  2.   

    第一个参数"c:\b.exe"改为"c:\\b.exe"
      

  3.   

    抱歉,是笔误其实已经时c:\\b.exe
      

  4.   

    第一个参数"c:\b.exe"改为"c:\\b.exe"
      

  5.   

    startInfo,processInfo 两个参数必须先清空
      

  6.   

    PROCESS_INFORMATION pi;
    STARTUPINFO si;    ZeroMemory( &si, sizeof(si) );
        si.cb = sizeof(si);
        ZeroMemory( &pi, sizeof(pi) ); si.wShowWindow=SW_HIDE;
    si.dwFlags=STARTF_USESHOWWINDOW;
    char ce[1024];
    strcpy(ce,m_szCmd);
    BOOL fRet=CreateProcess(NULL,   "c:\\b.exe"
                      NULL,
                      NULL,
                      FALSE,
                      NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE,
                      NULL,
                      NULL,
                      &si,
                      &pi);
      

  7.   

    wishma(wishma) :调用CreateProcess前这么做的
    memset( &startInfo, 0, sizeof(STARTUPINFO) );
    memset( &processInfo, 0, sizeof(PROCESS_INFORMATION) );
      

  8.   

    按wishma(wishma) 做法问题依旧
      

  9.   

    UINT ProcessStatus(LPVOID pParam)
    {
        PROCESS_INFORMATION pi;
    STARTUPINFO si;
    si.cb=sizeof(si);
    si.wShowWindow=SW_SHOW;
    si.dwFlags=STARTF_USESHOWWINDOW;
    BOOL fRet=CreateProcess(NULL,
                      "d:\\temp\\disk1\\setup.exe -r",
                      NULL,
                      NULL,
                      FALSE,
                      NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE,
                      NULL,
                      NULL,
                      &si,
                      &pi);
    if(fRet)
    {
    m_hPro=pi.hProcess;//保存当前进程句柄,在强制结束进程时使用。
    }
    if(::WaitForSingleObject(m_hPro,INFINITE)==WAIT_OBJECT_0)
    {
         AfxMessageBox("the Process is go over");
    }
    CloseHandle(m_hPro);
    return 0;   
    }