Re[6]: Перенаправление ввода-вывода консоли
От: Алекс Россия http://wise-orm.com
Дата: 09.05.02 17:10
Оценка:
Здравствуйте SergH, Вы писали:

SH>Здравствуйте Алекс, Вы писали:


А>>Даже так не работает:

А>>
А>>    STARTUPINFO si = {sizeof(STARTUPINFO)};
А>>    GetStartupInfo(&si);
А>>    si.dwFlags = STARTF_USESTDHANDLES;
А>>    si.hStdOutput = hFile;

А>>    PROCESS_INFORMATION pi;
А>>    ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));

А>>    if (CreateProcess(NULL, "rs1.exe", NULL, NULL, FALSE, CREATE_NEW_CONSOLE/*CREATE_NO_WINDOW*/, 0, 0, &si, &pi)){
А>>    CloseHandle(pi.hThread);
А>>    CloseHandle(pi.hProcess);
А>>    }
А>>    else{
А>>    int err = GetLastError();
А>>    printf("Error code %d",err);
А>>    }
А>>

А>>"разрешить наследование хэндлов дочерним процессом" не в тему, но я пробовал — не пашет!

SH>Надо не только разрешить наследование, но и сам хендл сделать наследуемым. Т.е.


SH>
SH>void main()
SH>{
SH>    HANDLE hFile;

SH>    SECURITY_ATTRIBUTES sa;

SH>    sa.nLength = sizeof(sa);
SH>    sa.bInheritHandle = TRUE;    
SH>    sa.lpSecurityDescriptor = NULL;
SH>    
SH>    hFile = CreateFile(
SH>                "stdout.txt",
SH>                GENERIC_WRITE | GENERIC_READ, 
SH>                FILE_SHARE_READ | FILE_SHARE_WRITE, 
SH>                &sa,
SH>                OPEN_ALWAYS,
SH>                0,
SH>                NULL);

SH>    SetFilePointer(hFile, 0, NULL, FILE_END);

SH>    STARTUPINFO si = {sizeof(STARTUPINFO)};

SH>    si.hStdOutput = hFile;
SH>    si.dwFlags    = STARTF_USESTDHANDLES;

SH>    PROCESS_INFORMATION pi;

SH>    CreateProcess(NULL, "printer.exe", NULL, NULL, TRUE ,0, 0, 0, &si, &pi);

SH>    CloseHandle(hFile);
SH>}
SH>


SH>У меня в таком виде работает.


Точно, у меня тоже заработало.
Только если указать флаг CREATE_NEW_CONSOLE — не пашет!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.