Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];




Вниз

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


Stexen   (2002-04-05 22:33) [0]

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



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

нету.



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

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



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

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



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

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



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

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

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;



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

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



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

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



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

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

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



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

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



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

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



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

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



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

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



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

Все получается очень просто и без шума и пыли (ну разве что окошко досовское останется):
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;

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



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

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



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

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



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

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. Сорри автору этого - копирайтов у меня не осталось.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.036 c
3-57635           yuricom               2002-03-28 08:06  2002.04.18  
Справочники, как определить свободна ли запись?


4-57918           five                  2002-02-15 10:27  2002.04.18  
изменения в каталогах


1-57698           sammy                 2002-04-08 09:23  2002.04.18  
Создание H


1-57701           de_La_Fer             2002-04-08 10:01  2002.04.18  
Проблемы с TListBox! HELP!!!!!!!!!!!!!!!!!!!!!!!!!!!


1-57670           Lion                  2002-04-07 10:02  2002.04.18  
печать StringGrid a