|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
|
albertn |
|
|||
Опытный Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Доброго времени суток!
Есть исходный код, который запускает процесс и перенаправляет его вывод в файл:
Он отлично работает для консольных win32 программ, но для DOS программ он ничего не записывает в выходной файл. Замечено, что если не указывать флаг CREATE_NEW_CONSOLE, то программа работает верно, но это не выход. Может кто знает как решить проблему? |
|||
|
||||
Dem_max |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
albertn |
|
|||
Опытный Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
||||
|
||||
Dem_max |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Почему не выход ????? -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
albertn |
|
||||
Опытный Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Фактически программа работает как сервис, внутри которого в несколько потоков происходит запуск программ. Необходимо чтобы выполнение программ не влияло друг на друга и на сервис в целом. Как я понимаю, флаг CREATE_NEW_CONSOLE гарантирует это. |
||||
|
|||||
Dem_max |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Попробуй без этого флага, но используй функции AllocConsole, AttachConsole
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Перебейте запускаемым программам все потоки ввода вывода (stdin/stdout/stderr), и они так же не будут влиять друг на друга и без CREATE_NEW_CONSOLE |
|||
|
||||
albertn |
|
||||
Опытный Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Выяснилась еще одна особенность, что при использовании CreateProcessAsUser для DOS программ без CREATE_NEW_CONSOLE вываливается ошибка "Неверный дескриптор." при перенаправлении. Тут я уже не знаю что делать :( Приведу фрагмент кода, на котором происходит ошибка:
Может все-же дело в XP? Добавлено через 2 минуты и 23 секунды
Это не решит проблему. |
||||
|
|||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Попробуйте создать открытый для всех Security Descriptor и записать его в sa.lpSecurityDescriptor, возможно процессу банально не хватает прав
|
|||
|
||||
albertn |
|
||||
Опытный Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Добавил в начало следующие строчки:
Результат работы остался тем-же. Добавлено через 9 минут и 25 секунд Кстати, оказывается без флага CREATE_NEW_CONSOLE программа выполняется и выводит в текстовый файл данные, но почему-то CreateProcessAsUser возвращает ошибку. PS. Консольные win32 программы работают как надо при любых параметрах. |
||||
|
|||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
А может ей не нравится NULL в si.hStdIn (кстати - NULL это валидный дескриптор файла)? Попробуйте открыть NUL и передать туда |
|||
|
||||
albertn |
|
||||
Опытный Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Результат тот-же. |
||||
|
|||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
А попробуйте CREATE_NO_WINDOW или DETACHED_PROCESS вместо CREATE_NEW_CONSOLE
|
|||
|
||||
albertn |
|
|||
Опытный Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Выбивает ту-же ошибку. |
|||
|
||||
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |