Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как завершить процесс запущенный execl?

16K
16 августа 2007 года
4nob1oz
34 / / 14.06.2007
Наткнулся на такую проблему. Вот код:
Код:
#include <process.h>
#include <windows.h>
#include <shellapi.h>
#include <stdio.h>
#include <iostream>

#define FILE "ipconfig.exe"

using namespace std;

void main()
{
    char outbuff[256];
    char buff[] = " /all";
    GetSystemDirectory(outbuff,256);
    lstrcat(outbuff,"\\ipconfig.exe");
    _execl(outbuff,FILE,buff,NULL);
    MessageBox(HWND(0),"title","hello world!",MB_OK);
    exit(0);
}


На заголовочные файлы не смотрите я просто многое пробовал и не стал подчищать чтобы выложить сюда :) А проблема такая. Программа эта для консоли. Запускаю её и как мне нужно появляется IPCONFIG /ALL, но мне нужно пропарсить ответ ipconfig и выдрать например ip шлюза моего, так вот как мне пройти дальше по программеи завершить процесс запущенный execl чтобы появился дальше MessageBox. Чтото я застрял на этом месте. Подскажите кто знает :)
2.9K
16 августа 2007 года
Ation
96 / / 27.07.2004
Можно конечно создавать консольное окно отдельным процессом, указав своими потоки вводо-вывода, потом дождаться, когда завершиться процесс.
Но гораздо проще получить инфо самому. Для этого надо использовать IPHLPApi (iphlpapi.dll). Например такие как GetAdaptersInfo, GetIpAddrTable и др.
Все они хорошо, с примерами типичных задач описаны в MSDN.
16K
16 августа 2007 года
4nob1oz
34 / / 14.06.2007
Спасибо тебе за ответ, но мне не нужно выдирать ip это привёл для примера просто чтобы была понятн задача. То есть мне нужно запусить стандартное приложение входящее в поставку дистрибутива и потом пропарсить его ответ и после парсинга то что мне нужно записать в файл. И я не знаю как это реализовать потому что застрял на завершении процесса.
3
16 августа 2007 года
Green
4.8K / / 20.01.2000
Запускай с помощью CreateProcess и терминируй с помощью TerminateProcess.
2.9K
16 августа 2007 года
Ation
96 / / 27.07.2004
Тогда смотри пример в MSDN для функции CreatePipe. Там создаеться процесс, который вводит-выводит в пайп. О завершении процесса можно узнать с помощью WaitForSingleObject(hProcess,...);
16K
16 августа 2007 года
4nob1oz
34 / / 14.06.2007
Эх парни я конечно понимаю может быть для вас легко это понять но мне бы хоть маленький кусман кода. Так просто легче разобраться. Если кого то не затроуднит сдеать например консольную прогу которая выводит просто hello world john, а через вторую программу как раз запустить первую и пропарсить то что она выдаёт и выдрать hello и john например. Если кому то не трудно это сделать то я буду очень презнателен.
2.9K
16 августа 2007 года
Ation
96 / / 27.07.2004
Хех. Чтоб использовать предложенный мной метод тебе понадобиться:
0. MSDN - либо на дисках, либо http://msdn2.microsoft.com/en-us/library/default.aspx.
1. Разобраться как работать с ReadFile/WriteFile.
2. Разобраться с CreateProcess.
3. <b>Смотришь пример</b> к функции CreatePipe. Переделываешь.
4. Потом делаешь WaitForSingleObject(hProcess, INFINITE), где hProcess - хендл созданного тобой процесса. Вернеться управление твоему потоку когда процесс завершиться. Все что он вывел, будет записано в пайп, но считывать лучше в отдельном потоке.
Вот и все. Уж не обессудь, но используються хорошо описанные функции, на которые достаточно примеров в майкрософтовской документации, поэтому писать лень :)
16K
17 августа 2007 года
4nob1oz
34 / / 14.06.2007
Ладно спасибо почитаю, поищу. Если что тебе в личку напишу :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог