Здравствуйте SergH, Вы писали:
SH>Здравствуйте Dutchman, Вы писали:
D>>Гляди:
SH>[skip]
SH>Вот такой процесс-родитель:
SH>SH>#include <windows.h>
SH>void main()
SH>{
SH> HANDLE hFile;
SH>
SH> hFile = CreateFile(
SH> "stdout.txt",
SH> GENERIC_WRITE | GENERIC_READ,
SH> FILE_SHARE_READ | FILE_SHARE_WRITE,
SH> NULL,
SH> OPEN_ALWAYS,
SH> 0,
SH> NULL);
SH> SetFilePointer(hFile, 0, NULL, FILE_END);
SH> STARTUPINFO si = {sizeof(STARTUPINFO)};
SH> si.hStdOutput = hFile;
SH> PROCESS_INFORMATION pi;
SH> CreateProcess(NULL, "printer.exe", NULL, NULL, FALSE, CREATE_NO_WINDOW, 0, 0, &si, &pi);
SH> // MessageBox(NULL, "Press OK", "", MB_OK);
SH> CloseHandle(hFile);
SH>}
SH>
SH>Запускает такого потомка:
SH>SH>#include <stdio.h>
SH>void main()
SH>{
SH> printf("Hello, World");
SH>}
SH>
SH>И не работает! В смысле файл stdout.txt пуст. На экран, правда, тоже ничего не выводится. Если сделать hFile наследуемым, лучше не становится. Если убрать CREATE_NO_WINDOW тоже. Неужели этот механизм не предназначен для файлов, а только для каналов?
A если si.dwFlags = STARTF_USESTDHANDLES добавить и разрешить наследование хэндлов дочерним процессом, заработает?