Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.47 MB
Время: 0.035 c
9-1101396790
Вась-Вась
2004-11-25 18:33
2005.03.20
Товарищи! Поможите с DirectDraw!


1-1109794597
DICE
2005-03-02 23:16
2005.03.20
Программа аналогового кодирования


14-1109861629
Doxygen
2005-03-03 17:53
2005.03.20
Acrobat 6 Professional


14-1109537438
nick-from
2005-02-27 23:50
2005.03.20
CMS


4-1107500617
oleg_SYS
2005-02-04 10:03
2005.03.20
Как создать меню с помощью Win API?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский