У меня есть SupportApp.EXE, который, если я запускаю вручную из окна CMD prommpt как это ::файла оператор повторно направление «>» не работает с CreateProcess() API
SupportApp.EXE -t 100 > AFile.csv
работы perfcetly штраф & он создает файл CSV для меня.
Теперь я хочу автоматизировать то же самое внутри кода VC++. Итак, для этого я использую API CreateProcess(). Фрагмент коды ниже ::
TCHAR launcher[512];
_tgetcwd(launcher, _MAX_PATH);
TCHAR workDir[512];
_tgetcwd(workDir, _MAX_PATH);
_tcscat(launcher, "\\App\\SupportApp.exe");
TCHAR cmdlineoption[512];
_tcscpy(cmdlineoption, " -t 120 > AFile.csv");
LPTSTR appPath = (LPTSTR)cmdlineoption;
STARTUPINFO sInfo;
memset(&sInfo, 0, sizeof(sInfo));
sInfo.cb = sizeof(sInfo);
sInfo.dwFlags = STARTF_USESHOWWINDOW;
sInfo.wShowWindow = SW_SHOWMAXIMIZED;
PROCESS_INFORMATION pInfo;
memset(&pInfo, 0, sizeof(pInfo));
if (!CreateProcess(launcher, appPath, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, workDir, &sInfo, &pInfo))
{
... // log error
}
// success
Я вижу, что CreateProcess() API завершается успешно, а также я вижу, что -t 120 варианта я даю также принимается этим «SupportApp.exe» НО перенаправление файла оператор «>» не работает с API CreateProcess().
Вместо этого выход направляется непосредственно на CMD. Но я хочу, чтобы вывод отправлялся в CSV-файл.
Может кто-нибудь, пожалуйста, помогите мне, как я могу перенаправить вывод моего «SupportApp.exe» в файл с помощью CreateProcess() API из моей VC++ код?
ОБНОВЛЕНИЕ 2:
Входы, данные рецензентов включены в настоящий & модифицированный фрагмент кода находится ниже, который принимает файл hnadle в структуре STARTUPINFO следующим образом ::
файл создается, но файл пуст & у него нет содержимого из createProcess()?
TCHAR launcher[512];
_tgetcwd(launcher, _MAX_PATH);
TCHAR workDir[512];
_tgetcwd(workDir, _MAX_PATH);
_tcscat(launcher, "\\App\\SupportApp.exe");
TCHAR cmdlineoption[512];
_tcscpy(cmdlineoption, " -t 120 > AFile.csv");
LPTSTR appPath = (LPTSTR)cmdlineoption;
STARTUPINFO sInfo;
memset(&sInfo, 0, sizeof(sInfo));
sInfo.cb = sizeof(sInfo);
sInfo.dwFlags |= STARTF_USESTDHANDLES; //newly added
sInfo.wShowWindow = SW_SHOWMAXIMIZED;
PROCESS_INFORMATION pInfo;
memset(&pInfo, 0, sizeof(pInfo));
sInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
sInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
SECURITY_ATTRIBUTES sa;
ZeroMemory(&sa, sizeof(sa));
sa.nLength = sizeof(sa);
sa.bInheritHandle = TRUE;
HANDLE hn;
если (INVALID_HANDLE_VALUE = (кп = CreateFile (L "DoneDone.csv", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE, & са, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0))!) { sInfo.hStdOutput = Нп; } если (! CreateProcess (пусковая, AppPath, NULL, NULL, FALSE, 0, NULL, Workdir, & sInfo, & pInfo)) { ... // журнал ошибки } // успех
Могу ли я попросить вас предоставить образец кода о том, как добиться этого перенаправления, используя поле STARTUPINFO hStdOutput? – codeLover