Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Вниз

Убить запущенный процесс.   Найти похожие ветки 

 
GhosTer   (2007-08-02 17:01) [0]

Есть такой вопросик:
Нужно просмотреть запущен ли процесс и если он запущен то его нужно убить.
Даже примерно не знаю как это сделать!
Скажите как. ПЛИИИИИЗ!


 
Dib@zol ©   (2007-08-02 17:06) [1]

Так?

uses Tlhelp32;
....
function KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := 0;

FSnapshotHandle := CreateToolhelp32Snapshot
(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
FProcessEntry32);

while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(
PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0));
ContinueLoop := Process32Next(FSnapshotHandle,
FProcessEntry32);
end;

CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
KillTask("Wn.exe");
end;

Что же насчёт того запущен или нет - это попробовать переименовать тестируемый файл. Если запущен - сгенерицца рантайм. В противном случае переименовывай обратно :)


 
DVM ©   (2007-08-02 17:17) [2]


> Dib@zol ©   (02.08.07 17:06) [1]
> Так?

1) Хэндлы закрывать надо.
2) С русскими именами проблемы будут.


> Что же насчёт того запущен или нет - это попробовать переименовать
> тестируемый файл. Если запущен - сгенерицца рантайм. В противном
> случае переименовывай обратно :)

А если доступ к файлу только чтение?


 
Dib@zol ©   (2007-08-02 17:20) [3]

> А если доступ к файлу только чтение?

{$I-}, переименование, сличение имени проги и строки, по к-рой переименовали. Если идентичны - обратное переименование. У меня с этой директивой даж ридонли файлы и удалялись, и разрешалась запись...


 
DVM ©   (2007-08-02 17:23) [4]


> ридонли файлы и удалялись, и разрешалась запись...

Я про права доступа к файлу в NTFS - только чтение.


 
Dib@zol ©   (2007-08-02 17:26) [5]

> Я про права доступа к файлу в NTFS - только чтение.

Ох туж этот чортоф NTFS. Жили бы все как я с 98-ым и программеры горя бы не знали! А если права получить? Щас может у себя процедурку найду...


 
Инс ©   (2007-08-02 17:29) [6]


> Что же насчёт того запущен или нет - это попробовать переименовать
> тестируемый файл. Если запущен - сгенерицца рантайм. В противном
> случае переименовывай обратно :)


Бред. Проверить, запущен процесс или нет, можно с помощью тех же ToolHelp.


 
DVM ©   (2007-08-02 17:29) [7]


> А если права получить?

А если программа запускается не из под аккаунта администратора?
А если программа запускается с сетевого диска и там доступ только чтение?
А если программа запускается с флоппи-диска или другого диска с переключателем только чтение?

Продолжать?


 
Dib@zol ©   (2007-08-02 17:30) [8]

> [7] DVM ©   (02.08.07 17:29)

> Ох туж этот чортоф NTFS.


 
Инс ©   (2007-08-02 17:30) [9]


> Щас может у себя процедурку найду...


Найдете процедурку, как под ограниченной учеткой открыть файл вопреки DACL? :)) Ню-ню...


 
DVM ©   (2007-08-02 17:31) [10]


> Dib@zol ©

Более того, файл запущенной программы легко переименуется!


 
Dib@zol ©   (2007-08-02 17:35) [11]

> Найдете процедурку, как под ограниченной учеткой открыть
> файл вопреки DACL? :)) Ню-ню...

А руткиты? Вон в хакере за прошлый месяц оч обстоятельная статейка была... Мож годика через полтора (непрерывного кодинга) и напишу :)


 
Dib@zol ©   (2007-08-02 17:36) [12]

> Более того, файл запущенной программы легко переименуется!

ПРАВДА? Это типа такой виндовый баг? Да основываясь на этом тыщу вирей можно написать!!!
ЗЫ Ну БГ, ну отмочил :)))


 
Инс ©   (2007-08-02 17:37) [13]


> 1) Хэндлы закрывать надо.


Так ведь код явно из фака какого-то низкокачественного. А там на такие мелочи не раскошеливаются ;) Да и привилегию отладчика на всякий случай получить не помешало бы...


 
DVM ©   (2007-08-02 17:39) [14]


> Dib@zol ©   (02.08.07 17:36) [12]

Каким образом ты это собираешься сделать? Он ведь только переименован быть может, удалить или заменить его все равно не выйдет.


 
Инс ©   (2007-08-02 17:39) [15]


> ПРАВДА? Это типа такой виндовый баг?


А что в этом страшного?


 
Инс ©   (2007-08-02 17:42) [16]


> удалить или заменить его все равно не выйдет.


Тут недавно обсуждалось, как удалить самого себя, без всяких там батников... В общем, геморно, но реально. Если вкратце, то выделить память, записать туда код удаления, запустить его, а образ exe-шника анмэпить.


 
Dib@zol ©   (2007-08-02 17:42) [17]

> Каким образом ты это собираешься сделать?

Переименовываем kernel32.dll в kernell32.dll... Ну?


 
GhosTer   (2007-08-02 17:44) [18]

Огромное спасибо!
А как узнать где находится этот запущенный файл, и определить от имени какого пользователя он запущен?


 
Инс ©   (2007-08-02 17:59) [19]


> GhosTer   (02.08.07 17:44) [18]


Поищите статьи по ToolHelp все-таки. Очень рекомендую... Плюс см OpenProcessToken, GetTokenInformation, LookupAccountSid


 
Инс ©   (2007-08-02 18:03) [20]


> Ну?


Ну?


 
GhosTer   (2007-08-02 18:21) [21]

Спасибо! Посмотрю! А где смотреть помими МСДН! Вот поставил что-то всего столько!



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

Форум: "Начинающим";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.04 c
2-1185639518
sproot
2007-07-28 20:18
2007.08.26
открытие формы при нажатие кнопки


15-1185793089
kernel
2007-07-30 14:58
2007.08.26
Регистрация авторского права на ПО


2-1186296860
Константинов
2007-08-05 10:54
2007.08.26
SQL запрос


2-1186383821
Kolan
2007-08-06 11:03
2007.08.26
SHFileOperation иногда ругается &amp;laquo;Не могу скопировть&amp;raquo;


2-1185765047
delphino
2007-07-30 07:10
2007.08.26
Работа с программой нескольких пользователей.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский