我想要CreateProcess函数来调用一个exe文件,并且传2个参数给这个exe程序,exe这边用__argv[i]去获取,我现在只知道直接把要传的参数以字符串形式加在CreateProcess后面的某个参数里面就可以了,但是看了CreateProcess函数的参数说明,也没搞懂是加在什么地方,哪位朋友知道? 比如我调用process.exe程序,同时给它传过去2个参数127.0.0.1 和 111。
    CreateProcess(exe的路径, NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)
    应该在哪个参数里面加呢?

解决方案 »

  1.   

    第二个参数就是命令行。
    "process 127.0.0.1 111"即可
      

  2.   

    BOOL CreateProcess(
      LPCTSTR lpApplicationName,                 // name of executable module
      LPTSTR lpCommandLine,                      // command line string
      LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
      LPSECURITY_ATTRIBUTES lpThreadAttributes,  // SD
      BOOL bInheritHandles,                      // handle inheritance option
      DWORD dwCreationFlags,                     // creation flags
      LPVOID lpEnvironment,                      // new environment block
      LPCTSTR lpCurrentDirectory,                // current directory name
      LPSTARTUPINFO lpStartupInfo,               // startup information
      LPPROCESS_INFORMATION lpProcessInformation // process information
    );lpCommandLine 
    [in, out] Pointer to a null-terminated string that specifies the command line to execute. 
      

  3.   

    第2个参数我现在传不了,传过去老不对,必须以字符串才能传吗? 我现在是
    不是127.0.0.1字符串  而是 char strIP[10];
    我试了下 不知道怎么把strIP传过去。
      

  4.   

    比如启动F:盘下的process.exe程序
    TCHAR szApp[MAX_PATH] = _T("F:\\process.exe ");
    TCHAR szIP[10] = {0};
    ... // szIP内存,_stprintf_s/_stprintf()之类的格式化szIP
    然后调用_tcscat_s()
    例如下面的
    TCHAR szApp[MAX_PATH] = _T("F:\\process.exe ");
    TCHAR szIP[10] = {0};
    _stprintf_s(szIP, _countof(szIP), _T("%s"), _T("111"));
    _tcscat_s(szApp, szIP);
            STARTUPINFO si = {sizeof(si)};
            PROCESS_INFORMATION pi = {0};
    if(CreateProcess(NULL, szApp, ....,&si, &pi)
            {
              CloseHandle(pi.hProcess);
              CloseHandle(pi.hThread);
            }
      

  5.   


    首先函数描述如下BOOL   CreateProcess( 
        LPCTSTR   lpApplicationName,   //   执行程序文件名 
        LPTSTR   lpCommandLine,     //   参数行 
        LPSECURITY_ATTRIBUTES   lpProcessAttributes,     //   进程安全参数 
        LPSECURITY_ATTRIBUTES   lpThreadAttributes,       //   线程安全参数 
        BOOL   bInheritHandles,     //   继承标记 
        DWORD   dwCreationFlags,   //   创建标记 
        LPVOID   lpEnvironment,     //   环境变量 
        LPCTSTR   lpCurrentDirectory,       //   运行该子进程的初始目录 
        LPSTARTUPINFO   lpStartupInfo,     //   创建该子进程的相关参数 
        LPPROCESS_INFORMATION   lpProcessInformation     //   创建后用于被创建子进程的信息 
    ); 其次
    你需要搞清楚你的环境是ASCII还是Unicode
    在普通环境下(ASCII),LPTSTR   和   char   *   是一回事。 
    在Unicode条件下,LPTSTR   是   WCHAR   *; 
    char   *   到   WCHAR   *的转换可用MultiBytesToWideChar()函数
      

  6.   


    谢谢,这个应该是要得答案,我刚才把几个char用+号连起来,难怪不行,必须先连接成一个,呵呵,再去试试