How do I redirect output to a file with CreateProcess?

前端 未结 5 2055
不思量自难忘°
不思量自难忘° 2020-11-27 19:52

I tried using CreateProcess to run a simple command like hg > test.txt. I tried running the string as a whole (as opposed to separating it into an applicatio

5条回答
  •  余生分开走
    2020-11-27 20:02

    The code below creates a console-less process with stdout and stderr redirected to the specified file.

    #include 
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        SECURITY_ATTRIBUTES sa;
        sa.nLength = sizeof(sa);
        sa.lpSecurityDescriptor = NULL;
        sa.bInheritHandle = TRUE;       
    
        HANDLE h = CreateFile(_T("out.log"),
            FILE_APPEND_DATA,
            FILE_SHARE_WRITE | FILE_SHARE_READ,
            &sa,
            OPEN_ALWAYS,
            FILE_ATTRIBUTE_NORMAL,
            NULL );
    
        PROCESS_INFORMATION pi; 
        STARTUPINFO si;
        BOOL ret = FALSE; 
        DWORD flags = CREATE_NO_WINDOW;
    
        ZeroMemory( &pi, sizeof(PROCESS_INFORMATION) );
        ZeroMemory( &si, sizeof(STARTUPINFO) );
        si.cb = sizeof(STARTUPINFO); 
        si.dwFlags |= STARTF_USESTDHANDLES;
        si.hStdInput = NULL;
        si.hStdError = h;
        si.hStdOutput = h;
    
        TCHAR cmd[]= TEXT("Test.exe 30");
        ret = CreateProcess(NULL, cmd, NULL, NULL, TRUE, flags, NULL, NULL, &si, &pi);
    
        if ( ret ) 
        {
            CloseHandle(pi.hProcess);
            CloseHandle(pi.hThread);
            return 0;
        }
    
        return -1;
    }
    

提交回复
热议问题