Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ФАЙЛЫ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Stexen ©   (2002-04-05 22:33:00) 

Есть ли способ и какой удалить запущенный екзешник...???


Builder   (2002-04-07 09:45:00) [1]

Stexen

В факе есть способ прикончить себя, но он не всегде :) работает (почему - то) под XP, а так - работает (даже под НТ).
Что бы не искал:

program delself;

uses
windows;

procedure DeleteSelf;
var hModule:THandle;
szModuleName:array[0..MAX_PATH] of char;
hKrnl32 : THandle;
pExitProcess, pDeleteFile, pFreeLibrary,pUnmapViewOfFile : pointer;
ExitCode:UINT;
begin
hModule:= GetModuleHandle(nil);

GetModuleFileName(hModule, szModuleName, sizeof(szModuleName));


hKrnl32 := GetModuleHandle ( "kernel32" );
pExitProcess := GetProcAddress ( hKrnl32, "ExitProcess" );
pDeleteFile := GetProcAddress ( hKrnl32, "DeleteFileA" );
pFreeLibrary := GetProcAddress ( hKrnl32, "FreeLibrary" );
pUnmapViewOfFile := GetProcAddress ( hKrnl32, "UnmapViewOfFile" );

ExitCode := system.ExitCode;

if($80000000 and GetVersion())<>0 then
// Win95, 98, Me
asm

lea eax, szModuleName
push ExitCode
push 0
push eax
push pExitProcess
push hModule
push pDeleteFile
push pFreeLibrary
ret
end
else
begin
CloseHandle(THANDLE(4));

asm
lea eax, szModuleName
push ExitCode
push 0
push eax
push pExitProcess
push hModule
push pDeleteFile
push pUnmapViewOfFile
ret
end
end
end;

begin
DeleteSelf;
end.

P.S. Сорри автору этого - копирайтов у меня не осталось.


SeF   (2002-04-07 02:48:00) [2]

а dll написать которую при помощи rundll32 запустить и выйти, а библиотека котрет все что надо и на удаление в wininst пропишется.
как такой вариант?


Stexen   (2002-04-06 23:29:00) [3]

Да убедительные довады... я тут способ еще один нашел просто впринципе не важно когда файл будет удален главное чтоб был удален соответственно можно уделение на автозапуск повесить тут в факе нашел.... прикольный способ ваще то...


Billy   (2002-04-06 22:52:00) [4]

Все получается очень просто и без шума и пыли (ну разве что окошко досовское останется):
procedure TForm1.Suicide;
var f:textfile;
begin
assignfile(f,"suicide.bat");
rewrite(f);
writeln(f,"@echo off");
writeln(f,":kill_exe");
writeln(f,"del ""+Application.ExeName+""");
writeln(f,"if exists ""+Application.ExeName+"" goto kill_exe");
writeln(f,":kill_bat");
writeln(f,"del suicide.bat");
writeln(f,"if exists suicide.bat goto kill_bat");
CloseFile(f);
ShellExecute(0,nil,"suicide.bat",nil,nil,0);
end;

Сработает, если вызывать при закрытии формы.


Alex_LG   (2002-04-06 17:10:00) [5]

1) найти процесс (эту самую проекцию в памяти, как я понимаю?Anatoly Podgoretsky © (05.04.02 22:56))
2) убить процесс
3) стереть уже НЕзапущенный ехе-шник :)


Anatoly Podgoretsky   (2002-04-06 16:42:00) [6]

Pat © (06.04.02 10:52)
Я бы не рискнул так говорить, написанно именно зарущенный и еще неизвестно чей.


Pat   (2002-04-06 16:26:00) [7]

>Malder © (06.04.02 11:55)
По крайней мере у меня это работает и никаких батников не остается. Только в списке задач появляется Winoldap - единственный недостаток


lipskiy   (2002-04-06 13:40:00) [8]

Как я понял - убить надо не себя, а чужое запущенное приложение.
А если себя - то через батник я делал - работает нормально, а батник сам себя убивает без проблем. Я это использовал для деинсталляции своей проги - не надо отдельный деинсталлятор писать, просто пунктик в менюшке "Деинсталляция" и маленькая процедурка - и все сносит подчистую прямо из запущенного приложения, просто и удобно.


Malder   (2002-04-06 11:55:00) [9]

Pat, а ты уверен, что способ прокатит ? Я не пробовал, но имхо после Application.Terminate ничего выполняться не будет. То есть строчка winexec("kill.bat",sw_hide); не выполниться...

А если все таки выполниться - то останется bat"ник...


Pat   (2002-04-06 10:52:00) [10]

>Anatoly Podgoretsky © (06.04.02 10:39)
Естественно...но вдруг именно это и требовалось...


Anatoly Podgoretsky   (2002-04-06 10:39:00) [11]

Это удаляет НЕзапущенный


Pat   (2002-04-06 10:35:00) [12]

Можно, но криво:

var f:textfile;
begin
setcurrentdir(extractfilepath(paramstr(0)));
MyName:=extractfilename(paramstr(0));
chartooem(pchar(MyName),pchar(MyName));
assignfile(f,"kill.bat");
rewrite(f);
writeln(f,"del "+MyName);
writeln(f,"del kill.bat");
closefile(f);
application.Terminate;
winexec("kill.bat",sw_hide);
end;


VID   (2002-04-06 01:09:00) [13]

ну нельзя, нелья ! :)))


Anatoly Podgoretsky   (2002-04-05 22:56:00) [14]

Это в досе так было, а теперь проецируется в память


Stexen   (2002-04-05 22:53:00) [15]

Да блин ну че не уж то никакого .... блин он же все равно полностья в память должен копироваться или как.. а че ему до реального расположения на диске


lipskiy   (2002-04-05 22:42:00) [16]

нету.


Наверх

Титульная страница Поиск, карта сайта Написать письмо