Мне нужно создать новый процесс с перенаправленным стандартным потоком ошибок в какой-нибудь файл. Код, из которого создается дочерний процесс, не имеет доступной консоли, поэтому бывают случаи, когда GetStdHandle (любой) вернет 0. По какой-то причине дочерний процесс попытается дублировать все свои стандартные дескрипторы ввода-вывода (исходный код для дочернего процесса недоступен). ) поэтому все его дескрипторы должны быть действительными.
Так что мне нужно запустить этот процесс так же, как его можно запустить из консоли с помощью:
someproc <nul >nul 2>err
Я вижу несколько путей для этого:
1. Создайте две пары труб. Возможно, это хорошее решение, но оно будет слишком сложным для меня.
2. Откройте файл "nul" с помощью вызова функции CreateFile ("nul", ...). Этот вызов не создает никаких файлов, но это тоже выглядит странно.
3. Используйте INVALID_HANDLE_VALUE. Это тоже работает, но я думаю, что могут быть другие проблемы с другими дочерними процессами.
Я считаю, что есть лучшие способы.