Здравствуйте 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 — не пашет!