Главная страница
    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.46 MB
Время: 0.038 c
1-1110103366
ceval
2005-03-06 13:02
2005.03.20
Подскажите пожалуста процедуру


3-1108884718
UVV
2005-02-20 10:31
2005.03.20
Получение обновлённых данных


1-1109808256
SpiDeE
2005-03-03 03:04
2005.03.20
TURBO POWER ASYNC PROFESSIOANAL v (ниже 4.06)


1-1110174925
smok_red
2005-03-07 08:55
2005.03.20
Запрет на появление дубликата дочернего окна в MDI приложение


1-1109775545
Гость
2005-03-02 17:59
2005.03.20
Как отобразить (в ПрогрессБаре, напр.) процесс копирования файла?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский