Здравствуйте Алекс, Вы писали:
А>Даже так не работает:
А>А> 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);
А> }
А>
А>"разрешить наследование хэндлов дочерним процессом" не в тему, но я пробовал — не пашет!
Надо не только разрешить наследование, но и сам хендл сделать наследуемым. Т.е.
void main()
{
HANDLE hFile;
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
hFile = CreateFile(
"stdout.txt",
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
&sa,
OPEN_ALWAYS,
0,
NULL);
SetFilePointer(hFile, 0, NULL, FILE_END);
STARTUPINFO si = {sizeof(STARTUPINFO)};
si.hStdOutput = hFile;
si.dwFlags = STARTF_USESTDHANDLES;
PROCESS_INFORMATION pi;
CreateProcess(NULL, "printer.exe", NULL, NULL, TRUE ,0, 0, 0, &si, &pi);
CloseHandle(hFile);
}
У меня в таком виде работает. |