說明: 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;
}