天天看點

C語言程式設計: CreateProcess标準輸出重定向到檔案

說明:  CreateProcess建立程序執行不支援簡單的 > 符号重定向,system之類的函數執行外部程序可以使用 > 符号直接重定向到檔案,但是system這類函數執行指令時,都會彈出控制台視窗,而CreateProcess建立執行程序可以設定屬性隐藏這個控制台視窗,背景執行。

示例代碼:

#include<windows.h>
#include<shellapi.h>
#include<stdio.h>
#include <string.h>
 
int my_CreateProcess()
{
    SECURITY_ATTRIBUTES sa;
    sa.nLength = sizeof(sa);
    sa.lpSecurityDescriptor = NULL;
    sa.bInheritHandle = TRUE;
 
    _unlink("D:/output.log");
 
    HANDLE h = CreateFile((L"D:/output.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("ipconfig");
    ret = CreateProcess(NULL, cmd, NULL, NULL, TRUE, flags, NULL, NULL, &si, &pi);
 
    if (ret)
    {
        WaitForSingleObject(pi.hProcess, INFINITE);
        qDebug()<<"執行成功....";
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
        //關閉檔案
        CloseHandle(h);
        return 0;
    }
    //關閉檔案
    CloseHandle(h);
    qDebug()<<"執行失敗....";
    return -1;
}      

繼續閱讀