Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

Может ли ехе...   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2005.03.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
14-1109671285
stakan
2005-03-01 13:01
2005.03.20
Уроки Юрия Зотова


1-1110263709
X-Disa
2005-03-08 09:35
2005.03.20
TSpeedButton.Handle


4-1107761079
pavel_guzhanov
2005-02-07 10:24
2005.03.20
Использование чекового термопринтера


1-1110191393
mf
2005-03-07 13:29
2005.03.20
Отладка программы


3-1109005439
Bogdan
2005-02-21 20:03
2005.03.20
Поиск записи по нескольким знакам