|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
||||||
Перенаправление вывода при запуске процесса23.08.2013, 13:56. Показов 3307. Ответов 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
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|