|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.11.2007, 12:51 | #1 |
Пользователь
Регистрация: 28.08.2007
Сообщений: 11
|
Прибить Create Process с содержимым
Привет всем!
Короче проблема следующая: есть кусок кода, кот. запускает консольную программу (без окна) через Pipe, CreateProcess. Потом все данные с этой программы берет и кидает в Memo, а потом программу, эту консольную нужно закрыть. Мое приложение закрывать не нужно. Вопрос как? Подскажите плиз, просто с Пайпами никогда не сталкивался. Код:
// пробовал это - не помогает // прибить процесс. procedure TForm1.Button2Click(Sender: TObject); var tmp: Thandle; begin DuplicateHandle(GetCurrentProcess,F ChildStdinWr,GetCurrentProcess,@Tmp ,0,False,DUPLICATE_SAME_ACCESS); CloseHandle(FChildStdinWr); FChildStdinWr:=Tmp; end; Последний раз редактировалось rpy3uH; 30.07.2008 в 11:23. |
06.11.2007, 13:19 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Ну я так понимаю TerminateProcess поможет
I'm learning to live...
|
06.11.2007, 13:32 | #3 |
Пользователь
Регистрация: 28.08.2007
Сообщений: 11
|
Не поможет. Он программу, запущенную приложением не закрывает. И даже не дает закрыть мою исходную программу. Пробовал через FindWindow так у программы нет окна. Короче не знаю. Но правда если программе послать Ctrl+C то она прибьется сама. Может в эту сторону смотреть. Тогда встречный вопрос: как прикрутить писальный Пайп к моему коду. Если можно с примерчиком плиз.
|
06.11.2007, 15:24 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
06.11.2007, 16:23 | #5 |
Пользователь
Регистрация: 28.08.2007
Сообщений: 11
|
Да сам процесс закрывается, но ехешник, запущенный эти процессом остается в памяти. Вот в чем загвоздка. Короче нашел готовый пример, кот. прибивает процесс и все работает корректно:
Я думаю, ты не это имел ввиду? function KillTask(ExeFileName: string): Integer; const PROCESS_TERMINATE = $0001; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin Result := 0; FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNA PPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while Integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProces sEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFil e) = UpperCase(ExeFileName))) then Result := Integer(TerminateProcess( OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0)); ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end; // прибить процесс. procedure TForm1.Button2Click(Sender: TObject); begin KillTask('моя программа.exe'); end; Это корректно вообще? Просто подозрительно гладко заработало, теперь можно спокойно парсить строки. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
kill process | const | Общие вопросы C/C++ | 2 | 28.08.2008 19:11 |
Выбор компонента для работы с содержимым текстовых файлов[Delphi] | sergey31 | Помощь студентам | 2 | 28.08.2008 16:53 |
Create DLL | Altera | Свободное общение | 4 | 12.02.2008 03:28 |
скопировать папку со всем её содержимым | Tech07 | Общие вопросы Delphi | 8 | 02.12.2007 12:06 |
Проблемы с internet-ом (Generic Host Process for Win32 Services), help | young_W | Операционные системы общие вопросы | 4 | 06.11.2007 22:30 |