本帖最后由 VisualEleven 于 2013-09-04 15:06:40 编辑

解决方案 »

  1.   

    把notepad.exe放在currentdir路径下
      

  2.   

    STARTUPINFO si;
        PROCESS_INFORMATION pi;    ZeroMemory( &si, sizeof(si) );
        si.cb = sizeof(si);
        ZeroMemory( &pi, sizeof(pi) );
        TCHAR szPath[MAX_PATH] = {};
        GetModuleFileName(NULL, szPath, MAX_PATH);
        TCHAR *pPos = _tcsrchr(szPath, '\\');
        *pPos = 0;    if(!CreateProcess(L"C:\\windows\\system32\\notepad.exe",L" c:\\123.txt",\
            NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS|CREATE_SHARED_WOW_VDM |CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT,NULL,szPath,&si,&pi))
        {
            //printf("Fail to create process ,error %d \n",GetLastError());
        }
        else
        {
           // printf("Success to create Porcess ,error %d \n",GetLastError());
        }
    }
    我这样使用没问题
      

  3.   

    这段程序我是在图形化的MFC里面写的,吧这段代码拿出来放到控制台下的程序就没有问题了,可以打开c:\123.txt 
    现在的问题是我createprocess这个函数返回成功了,没有报错,但是notepad没有打开。
    二楼提供的想法我之前也做了,但是仍然无效的。
    你们有试过在MFC的界面程序里面实现这段代码么?
    请帮吗试试看有没有跟我一样的现象。
      

  4.   

    试过,不行。
    我是在MFC程序里点击一个Button,打开文件。控制台下我也是可以打开的,就是MFC界面程序里面不行。
      

  5.   

    STARTUPINFO si = {sizeof(si)};
    PROCESS_INFORMATION pi = {0};
    TCHAR szCmd[MAX_PATH] = _T(" c:\\123.txt");
    if(!CreateProcess(_T("C:\\windows\\system32\\notepad.exe"), szCmd,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS|CREATE_SHARED_WOW_VDM |CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT,NULL,NULL, &si, &pi))
    {
    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
    }
      

  6.   


       // ********** 你的代码缺少这段**********************//
         STARTUPINFO Sinfo;
         PROCESS_INFORMATION Pinfo;
         ZeroMemory( &Sinfo, sizeof(Sinfo) );
         Sinfo.cb = sizeof(Sinfo);
         ZeroMemory( &Pinfo, sizeof(Pinfo) );
       // **********************************************// char szCurrentDir[MAX_PATH];
    GetCurrentDirectory(MAX_PATH,szCurrentDir);
    if(!CreateProcess("C:\\windows\\system32\\notepad.exe"," D:\\123.txt",
    NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS|CREATE_SHARED_WOW_VDM  |
    CREATE_UNICODE_ENVIRONMENT,NULL,szCurrentDir,&Sinfo,&Pinfo))
    {    
    UINT nErrCode = GetLastError();
    TRACE0("Fail to create process ,error %d \n",GetLastError());
    }
    else
    {    
    printf("Success to create Porcess ,error %d \n",GetLastError());
    CloseHandle(Pinfo.hProcess);
    CloseHandle(Pinfo.hThread);
    }