Главная страница
    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.043 c
2-1155203206
Piero
2006-08-10 13:46
2006.09.03
Вопрос про TList


2-1155458365
vain
2006-08-13 12:39
2006.09.03
Иконки для программ


15-1155336576
SerJaNT
2006-08-12 02:49
2006.09.03
АДМИНАМ: надо бороться со спамом


15-1154692230
grisme
2006-08-04 15:50
2006.09.03
Базовые зниния C++


1-1149819265
tButton
2006-06-09 06:14
2006.09.03
оптимизация: что быстрее?





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