|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
||||||
Перенаправление вывода при запуске процесса23.08.2013, 13:56. Показов 3403. Ответов 16
Метки нет (Все метки)
Создаю файл, в который хочу перенаправить вывод.
Заполняю структуру STARTUPINFO. Не забываю туда вписать дескриптор только что созданного файла. Создаю процесс. Он отрабатывает, но в выходном файле нифига нет.
0
|
||||||
| 23.08.2013, 13:56 | |
|
Ответы с готовыми решениями:
16
Перенаправление потока вывода Перенаправление вывода в другое окно При запуске из среды программа работает, при запуске выполняемого файла выдает ошибку |
|
Ушел с форума
|
|||||||
| 23.08.2013, 16:00 | |||||||
|
4 параметр CreateFile - указатель на структуру SECURITY_ATTRIBUTES.
Заполните ее и передайте в функцию:
1
|
|||||||
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
|
| 26.08.2013, 07:54 [ТС] | |
|
Все равно не работает.
0
|
|
|
Ушел с форума
|
|
| 26.08.2013, 08:58 | |
|
Показывайте код.
0
|
|
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
||||||
| 26.08.2013, 09:00 [ТС] | ||||||
0
|
||||||
|
Ушел с форума
|
|
| 26.08.2013, 09:14 | |
|
SECURITY_ATTRIBUTES нужно указывать для объекта, который вы хотите
наследовать в дочерние процессы. В данном случае ее нужно указывать в CreateFile (строки 15 и 17 в примере выше), а не в CreateProcess.
1
|
|
|
|
|||||||||||
| 05.02.2015, 17:26 | |||||||||||
|
Есть такой код:
Кликните здесь для просмотра всего текста
Решение через WaitForSingleObject(pi.hProcess,TimeOut) т.е ожидание завершение процесса мне не нравится. Хотелось во первых реализовать свой класс и хотелось бы ждать именно того момента когда данные появятся и сразу читать-выводить, а не ждать завершения процесса. Я пришел к такому решению что нужно читать асинхронно и тут же ждать завершение и если что по таймауту генерировать соответствующее исключение или код возврата. Т.е что-то типа:
И тут собственно главный вопрос как правильно привязать хендлы именованного канала к хендлам передаваемым в STARTUPINFO что бы обеспечить чтение и запись (с таймаутами)? Добавлено через 21 час 27 минут up! Добавлено через 22 часа 8 минут up!
0
|
|||||||||||
|
Ушел с форума
|
||
| 05.02.2015, 23:37 | ||
|
1. Создать два именованных канала (CreateNamedPipe). 2. Для каждого канала вызвать ConnectNamedPipe, переведя их в режим приема подключений. 3. Открыть каждый канал через CreateFile, при этом в структуре SECURITY_ATTRIBUTES поле bInheritHandle должно быть TRUE. В итоге у нас получится два канала, и на каждый по два хэндла: один серверный, полученный через CreateNamedPipe, второй клиентский, полученный через CreateFile. Клиентский хэндл может наследоваться. 4. Запускаем дочерний процесс с флагом bInheritHandles = TRUE. Клиентские хэндлы передаем ему через STARTUPINFO. 5. Ну а дальше асинхронно пишем и читаем из соответствующих серверных хэндлов.
1
|
||
|
|
||
| 05.02.2015, 23:41 | ||
|
Все остальное как бы "ясно" и почти готово.
0
|
||
|
Ушел с форума
|
|
| 05.02.2015, 23:44 | |
|
Хэндлы, созданные через CreateFile, т.е. клиентские, передать в дочерний процесс.
Например, с одного пайпа в hStdOutput и в hStdError, - этот пайп будет отвечать за перехват вывода дочернего приложения, - а со второго в hStdInput - а через этот пайп можно будет передавать что-нибудь во входной поток дочернего процесса. После создания процесса оба этих хэндла можно закрыть, хоть это и не обязательно.
1
|
|
|
|
||
| 05.02.2015, 23:54 | ||
|
Спасибо буду пробовать.
0
|
||
|
Ушел с форума
|
|||
| 06.02.2015, 00:09 | |||
|
Это у анонимных пайпов есть разделение на hRead и hWrite, а здесь оба хэндла в плане вызова ReadFile/WriteFile получаются как бы равноценны. Впрочем, я с пайпами давно дела не имел, сейчас не помню деталей. Ведь дочернее приложение, когда работает с std::cout/printf, подразумевает его "синхронность"...
0
|
|||
|
|
||
| 06.02.2015, 00:26 | ||
|
А как же такую проблему решить? Изначально хотелось обойтись без дополнительных ждущий потоков и в синхронном режиме с отсечкой по таймауту чтения/записи.
0
|
||
|
Ушел с форума
|
||
| 06.02.2015, 00:32 | ||
|
флага FILE_FLAG_OVERLAPPED, то он будет с ними работать синхронно. По идее, так.
0
|
||
|
|
|||||||
| 06.02.2015, 00:34 | |||||||
|
Кликните здесь для просмотра всего текста
0
|
|||||||
|
Ушел с форума
|
|
| 06.02.2015, 00:42 | |
|
Это еще почему ?
Ты ведь будешь работать с пайпами через серверный хэндл, который открыт в асинхронном режиме (CreateNamedPipe). А дочернему процессу будет выдан синхронный хэндл, полученный у CreateFile. Или я чего-то недопонял...
1
|
|
|
|
||
| 06.02.2015, 21:41 | ||
|
Собственно нужно попробовать, попробую отпишу, если что, еще раз спасибо. Добавлено через 20 часов 52 минуты В общем проверил- работает как надо.
1
|
||
| 06.02.2015, 21:41 | |
|
Помогаю со студенческими работами здесь
17
Как прочитать данные из потока вывода другого процесса Перенаправление ввода/вывода при запуске процессов При выполнении батника на некоторых машинах с Windows XP не работает перенаправление вывода команд в NUL
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|