Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];

Вниз

Самоудаление   Найти похожие ветки 

 
Calibr2   (2006-07-20 21:44) [0]

Как сделать чтобы программа удалила сама себя?


 
Мефисто   (2006-07-20 21:50) [1]

Вот сейчас придут и попинают...


 
RzCoDer ©   (2006-07-20 21:58) [2]

Программа не может удалить сама себя, т.к. нельзя удалять приложения загруженные в память. А вот дать такое задание какому нить левому системному исполнителю можно.


 
Джо ©   (2006-07-20 21:58) [3]

Можно воспользоваться докумментированным способом, функцией MoveFileEx.
Задаем следующие параметры:
MoveFileEx (PChar(Application.ExeName),nil,MOVEFILE_DELAY_UNTIL_REBOOT)

При первой же перегрузке ОС файл FileName будет удален. Пользователь, в контексте которого выполняется данный код, должен иметь права локального администратора.


 
Джо ©   (2006-07-20 22:01) [4]

Да, еще. Все это работает начиная с NT. В 98 аналогичную задачу можно решить создав файл WININIT.INI в директории Windows, если файл уже существует, просто добавить в него строку такого образца в секции [rename]:
NULL=SourceFileName


 
tesseract ©   (2006-07-20 22:03) [5]

> [3] Джо ©   (20.07.06 21:58)


А был же вроде трюк - переименовать себя и удалить, но вроде в XP не работал.


 
Anatoly Podgoretsky ©   (2006-07-20 22:41) [6]

Джо ©   (20.07.06 21:58) [3]
А иногда система годами не перезагружается, особенно в свете hibernate


 
Джо ©   (2006-07-20 22:45) [7]

> [6] Anatoly Podgoretsky ©   (20.07.06 22:41)

Значит, нужно поступить вежливо и вывести пользователю окно с "Перегрузите, пожалуйста, компьютер" :)


 
Andy BitOff ©   (2006-07-20 23:02) [8]

А я вот узнал, что строка "del setup.bat >NUL" в bat"нике setup.bat удалит его, тем самым можно удалить себя создав батник.

P.S. Я знаю что земля не круглая (с)


 
_mik ©   (2006-07-20 23:07) [9]

вот пример

procedure DeleteSelf;
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;




Страницы: 1 вся ветка

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

Наверх





Память: 0.46 MB
Время: 0.04 c
3-1150968481
PEAKTOP
2006-06-22 13:28
2006.09.03
Формат BLOB при экспорте в XML


15-1155119751
Карелин Артем
2006-08-09 14:35
2006.09.03
Будущее сайта


9-1134035185
kblc
2005-12-08 12:46
2006.09.03
BlackJack


15-1155042469
ocean
2006-08-08 17:07
2006.09.03
Отмена Scandisk при загрузке XP


15-1154597004
DelphiLexx
2006-08-03 13:23
2006.09.03
Фоновый рисунок Delphi на рабочий стол





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