Форум: "WinAPI";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
ВнизМожет ли ехе... Найти похожие ветки
← →
Artur (2005-02-03 21:18) [0]Может ли ехе-файл удалить самого себя? Есть ли варианты кроме bat-файла?
← →
Anatoly Podgoretsky © (2005-02-03 21:40) [1]Не может, а с bat-файл это не он сам себя, но хорошо.
← →
Gero © (2005-02-03 21:45) [2]Теоретически нет.
← →
z007 (2005-02-03 22:59) [3]
> Есть ли варианты кроме bat-файла?
есть еще варианты с exe, com и dll - файлами )
← →
Просто Джо © (2005-02-04 02:37) [4]
> Может ли ехе-файл удалить самого себя?
Может, а почему нет? Не сказано же - во время его выполнения.
Решение для NT:MoveFileEx(szSrcFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
Решение для 9x:
Ищем файл $WINDIR$\wininit.ini
В секцию [rename] пишем:
NULL=путь_и_имя_файла
Итог:
При следующей перезагрузке файл будет удален.
← →
Просто Джо © (2005-02-04 02:41) [5]Кстати, в SDK и MSDN -- ошибка (?)
Указано, что имя ключа должно быть "NUL". Во всех попадавшихся мне файлах wininit.ini я видел только "NULL". То-ли инсталляторы неграмотные, то-ли опечатка в MSDN.
Впрочем, я никогда не пробовал писать "NUL", а сейчас нет 9x под рукой, чтобы проверить, отрабатывается ли также "NUL".
← →
Klev (2005-02-04 04:24) [6]Проверял только на Win2K и W98 - все работает. Компиллировал с помощью D6.
Для (xp?)/2000:
procedure selfdeletent;
var
module: HModule;
buf: array[0..MAX_PATH - 1] of char;
p: ULong;
hKrnl32: HModule;
pExitProcess,
pDeleteFile,
pFreeLibrary: pointer;
begin
module := GetModuleHandle(nil);
GetModuleFileName(module, buf, SizeOf(buf));
CloseHandle(THandle(4));
p := ULONG(module) + 1;
hKrnl32 := GetModuleHandle("kernel32");
pExitProcess := GetProcAddress(hKrnl32, "ExitProcess");
pDeleteFile := GetProcAddress(hKrnl32, "DeleteFileA");
pFreeLibrary := GetProcAddress(hKrnl32, "FreeLibrary");
asm
lea eax, buf
push 0
push 0
push eax
push pExitProcess
push p
push pDeleteFile
push pFreeLibrary
ret
end;
end;
Для 98/95/(me?):
Procedure selfDelete98;
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 := 0;
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;
← →
GrayFace © (2005-02-04 06:53) [7]В XP не работает.
← →
Marser © (2005-02-04 17:18) [8]Системный реестр, ключ RunOnce
← →
Kerk © (2005-02-04 17:25) [9]Klev (04.02.05 4:24) [6]
попса
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.082 c