Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.28;
Скачать: CL | DM;

Вниз

Корректно закрыть процесс   Найти похожие ветки 

 
Керик   (2006-12-02 18:12) [0]

Из своей проги можно ЗАПУСТИТЬ любую внешнюю программу. А можно ли внешнюю программу, запущенную из своей проги, КОРРЕКТНО ЗАКРЫТЬ? Можно убить процесс, но мне не это нужно.


 
Dmitrij_K   (2006-12-02 18:13) [1]

Корректно программа убиться может только сама.


 
Eraser ©   (2006-12-02 18:22) [2]

> [0] Керик   (02.12.06 18:12)

если есть окна - попробовать послать им WM_CLOSE.


 
Керик   (2006-12-03 11:47) [3]

Если послать главному окну WM_CLOSE, то это не будет всегда работать правильно. Например, если у программы открыты диалоговые окна или она просто не реагирует на это сообщение по другим причинам.
Может есть какой-нибудь выход из положения?


 
Eraser ©   (2006-12-03 14:13) [4]

> [3] Керик   (03.12.06 11:47)


> Может есть какой-нибудь выход из положения?

нету.


 
Керик   (2006-12-03 14:29) [5]

Один хороший человек (программирует на C++) подсказал, что смысл в следующем:
ищешь команду на дельфи, которая запускает приложение (программу) программной строкой.
В C++ их вообще чуть ли не с 10 функций делающих это.
На старом бэйсике эта функция вообще SHELL называлась.
А там просто пишешь команду
TaskKill /IM program.exe
где program.exe - имя файла программы которую нужно закрыть.
Если внешних программ несколько, то лучше полный путь к программе прописать.

Я не разбираюсь в C++. Попробовал так:

WinExec("TaskKill /IM winamp.exe", SW_HIDE);
WinExec("TaskKill /IM "C:\Program Files\Winamp\winamp.exe"", SW_HIDE);

Когда винамп был запущен, я и то и другое пробовал. В ответ - ничего не происходит. Может есть какие-то предложения?


 
Eraser ©   (2006-12-03 14:36) [6]

> [5] Керик   (03.12.06 14:29)


> Один хороший человек (программирует на C++) подсказал, что
> смысл в следующем:
> ищешь команду на дельфи, которая запускает приложение (программу)
> программной строкой.

и что?
какое отношение это имеет к сабжу?


 
Керик   (2006-12-03 15:07) [7]

Меня интересует не закрытие любой внешней программы, а той, которая запущена из моей проги!
К сабжу это имеет прямое отношение: это и есть то, что нужно писать вместо program.exe


 
oxffff ©   (2006-12-03 15:11) [8]


> Керик   (03.12.06 14:29) [5]
> Один хороший человек (программирует на C++) подсказал, что
> смысл в следующем:
> ищешь команду на дельфи, которая запускает приложение (программу)
> программной строкой.
> В C++ их вообще чуть ли не с 10 функций делающих это.
> На старом бэйсике эта функция вообще SHELL называлась.
> А там просто пишешь команду
> TaskKill /IM program.exe
> где program.exe - имя файла программы которую нужно закрыть.
>
> Если внешних программ несколько, то лучше полный путь к
> программе прописать.


А что taskKill КОРРЕКТНО ЗАКРЫТЬ процесс может?
Что то название сомнительное.

Да и кстати даже Microsoft не может корректно закрыть задачу, если она повисла (поток на котором висит Getmessage).
А там пишут на с++.

Как вариант нажать RESET. И для гарантии выдернуть из розетки.


 
oxffff ©   (2006-12-03 15:15) [9]

А что TerminateProcess?

The TerminateProcess function terminates the specified process and all of its threads.


 
Керик   (2006-12-03 15:16) [10]

Оказалось, что в WinXP Home Edition нет файла taskkill.exe.
Сейчас его добавлю в System32 и попробую.


 
oxffff ©   (2006-12-03 15:17) [11]

Создаешь с помощью CreateProcess
в LPPROCESS_INFORMATION есть hаndle.
И используешь его в TerminateProcess.


 
Керик   (2006-12-03 15:20) [12]

TerminateProcess - это и есть убивалка процессов, но мне это не нужно.


 
oxffff ©   (2006-12-03 15:24) [13]

Открой секцию импорта у taskKill и посмотри импортируемые функции.
Там есть TerminateProcess.


 
Керик   (2006-12-03 15:28) [14]

Похоже, что работает!


 
oxffff ©   (2006-12-03 15:29) [15]

If you know the name of a process to kill, for example notepad.exe, use the following command from a command prompt to end it:

taskkill /IM notepad.exe

This will cause the program to terminate gracefully, asking for confirmation if there are unsaved changes. To forcefully kill the same process, add the /F option to the command line. Be careful with the /F option as it will terminate all matching processes without confirmation.

To kill a single instance of a process, specify its process id (PID). For example, if the desired process has a PID of 827, use the following command to kill it:

taskkill /PID 827

Using filters, a variety of different patterns can be used to specify the processes to kill. For example, the following filter syntax will forcefully kill all processes owned by the user Quinn:

Ключ /F как раз и использует terminateProcess.


 
Керик   (2006-12-03 15:37) [16]

Проверил:
WinExec("TaskKill /IM winamp.exe", SW_HIDE);
WinExec("TaskKill /IM "C:\Program Files\Winamp\winamp.exe"", SW_HIDE);

Работает.
Тему можно считать закрытой. Всем спасибо!


 
Eraser ©   (2006-12-03 15:40) [17]

мдя...


 
Керик   (2006-12-03 15:41) [18]

Для oxffff ©:
Это не значит, что все процессы taskkill убивает этой функцией. Из твоего сообщения видно, что используется TerminateProcess в зависимости от параметров. Например, использует при параметре /F

при параметре /IM taskkill не TerminateProcess использует


 
Eraser ©   (2006-12-03 15:43) [19]

> [18] Керик   (03.12.06 15:41)

угу, оно использует WM_CLOSE...


 
Керик   (2006-12-03 15:50) [20]

Для Eraser ©:
Согласен.


 
oxffff ©   (2006-12-03 17:18) [21]

А еще есть WM_QUIT.


 
Leonid Troyanovsky ©   (2006-12-03 18:09) [22]


> Керик   (03.12.06 15:50) [20]
> Для Eraser ©:
> Согласен.

Тогда, будь любезен, определение корректности - в студию.

--
Regards, LVT.


 
Eraser ©   (2006-12-03 18:11) [23]

> [21] oxffff ©   (03.12.06 17:18)

кстати да!
только если его слать всем подряд потокам приложения - можно получить, мягко говоря, непредсказуемый результат в некоторых приложениях.



Страницы: 1 вся ветка

Текущий архив: 2007.01.28;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.06 c
11-1147007264
Some
2006-05-07 17:07
2007.01.28
Ошибка при попытке создать файл с помощью PStrList.


15-1168525384
Prohodil Mimo
2007-01-11 17:23
2007.01.28
Есть ли какой редактор для MySQL ?


15-1168412976
Postalll
2007-01-10 10:09
2007.01.28
Визуальные компоненты


2-1168072050
Steep
2007-01-06 11:27
2007.01.28
ADO+MS SQL


2-1168177071
Dr. Genius
2007-01-07 16:37
2007.01.28
Скрытие файлов и папок на уровне Windows kernel