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




Вниз

KillSelf 


T2   (2001-12-14 03:22) [0]

Как заставить программу совершить самоубийство? Тока не при перезагрузке, а в риал-тайме!



KilkennyCat   (2001-12-14 04:12) [1]

Самоубийство - имеется ввиду удаление с винта?
Она просто должна жить в памяти, откуда спокойно себя стирает с винта, а потом говорит сама себе: close.



T2   (2001-12-14 04:32) [2]

Да, удаление с винта. Но удалять сама себя не хочет-грит файл заблокирован (очевидно она не вся в память залазит, а подгружается и держит ехе открытым) :(



KilkennyCat   (2001-12-14 04:37) [3]

Ну разумеется! Если не срочно, то я потом напишу как (сейчас занят), пока я только помню обрывки досовских вариантов из "битва в памяти".



T2   (2001-12-14 05:32) [4]

Ok, будет время, кинь на gu-gu-gu2@mtu-net.ru иль здесь напиши.



Milz   (2001-12-14 09:31) [5]

Не помню откуда откопал, завершает программу и удаляет её с винта.
Подскажите как это работает, конкретно меня интересуют как происходят вызовы апи, софтайс показал что тут не просто переход по адресу функции, а какие-то извращения в kernel32, а потом вызывается сама апи и так с каждой. что это и как передаются параметры?

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;



Andrey   (2001-12-14 10:34) [6]

Господа, Зачем столько хитростей,:) обратитесь в FAQ-у http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988621694&n=15



paul_shmakov   (2001-12-15 01:14) [7]

2 Andrey:
FAQ не прав. а вот Milz дал правильное решение. здесь в форуме WinApi мы это решение подробно рассматривали.



А вот   (2001-12-15 01:41) [8]

насчет "правильности" - надобно посоветоваться с Digitman. Он по-моему этим заинтересовался и копал глубже. Если имхо он захочет поделиться. В чем лично я сомневаюсь, поскольку тема "скользкая".



paul_shmakov   (2001-12-16 02:13) [9]

2 А вот:
:) ну а если Digitman не захочет поделиться, то я поделюсь.

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1004956210&n=5

см. ссылку, ну очень подробно для winnt/2k




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




Наверх





Память: 0.73 MB
Время: 0.019 c
7-22441           ulysses               2001-09-19 20:31  2002.01.08  
Delphi 5 Ent не ставится нормально под Win2k Pro


4-22493           mangoost              2001-11-05 12:06  2002.01.08  
Как обойти Access violation при попытке записи(+)


1-22074           Bb                    2001-12-17 21:28  2002.01.08  
HELP!!!!


4-22462           Winnie!               2001-11-01 19:50  2002.01.08  
использоание BitBlt и CreateBitmap


1-22013           Curious               2001-12-17 12:53  2002.01.08  
Запуск EXE из текущей программы.