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

Вниз

Удаление выполняющегося EXE файла   Найти похожие ветки 

 
OlegV   (2003-11-13 15:37) [0]

Народ! помогите плиз, в свое время в форуме находил инфу, о том что в винде можно создать ini-файл, записать туда строки с именами удаляемых файлов и при рестарте виндов удалить эти файлы.
Так вот не могу вспомнить название ini файла, а надо срочно!


 
Prov   (2003-11-13 17:43) [1]

Просто так, во время выполнения программы, неельзя её удалить..
Можно записать в Autoexec.bat строку, которая при загрузке компа удаляет cjmmand.com-ом твоё приложение )))


 
Igg   (2003-11-13 18:03) [2]

В винде есть ключ HKLM\Software\Wicrosoft\Windows\CurrentVertion\RunOnce пишешь туда. и у тебя при следующем пересапуска удалится твой файлик


 
Игорь Шевченко   (2003-11-14 00:38) [3]

MoveFileEx для NT-систем

C:\WINDOWS\wininit.ini для Win9x систем
Синтаксис такой:
[NUL]
C:\WINDOWS\BLAHBLAH.EXE=1


 
Anatoly Podgoretsky   (2003-11-14 00:43) [4]

[Rename]
NUL=C:\WINDOWS\BLAHBLAH.EXE


 
default   (2003-11-14 00:51) [5]

а есть ведь красивое решение через bat-файл - exe-ик удаляется сразу после завершения его работы


 
default   (2003-11-14 01:18) [6]

вот гляньте
"Очевидно что под Win32 удаление работающего кода невозможно. На время выполнения он просто добавляется к swap файлу - т.е. винды при нехватки памяти данные программы (массив переменных) сбрасывают в Swap (Page) файл, а сам код программы просто уничтожается из памяти, при возобновлении процесса, недостающие куски кода опять считываются из исходного файла. Понятно, что изменение файла пока его код выполняется будет иметь катастрофичные последствия, поэтому винды при запуске программы считают DLL или EXE файл по сути куском файла подкачки и запрещают любые манипуляции над ним. Кстати именно по этой причине все инсталляторы начинают свою работу с операции "Preparing to install", которая делает очень простую вещь - сам инсталлятор копируется во временную папку и перезапускает себя уже с винта, чтоб предотвратить крах системы при смене дискетты или CD. По этой же причине программы упакованные любыми EXE упаковщиками требуют больше памяти для запуска - так как загружается в память и исходный компрессированный код и декомпрессированный поток... Но несмотря на все сказанное можно удалить файл из "самого себя" при помощи маленькой хитрости: мы создаем и запускаем BAT файл - который и удалит программу, а саму программу закрываем, как только система "отпустит" файл - файл будет удален и затем BAT файл удалит самого себя. Пользователь всего этого не заметит - он увидит, что после завершении работы файла программы уже нет.

Uses ShellApi;
procedure TForm1.FormDestroy(Sender: TObject);
var f:textFile;
FileName:String;
begin
FileName:=changefileext(paramstr(0),".bat");
assignFile(f,FileName);
rewrite(f);
writeln(f,":1");
writeln(f,format("Erase "%s"",[paramstr(0)]));
writeln(f,format("If exist "%s" Goto 1",[paramstr(0)]));
writeln(f,format("Erase "%s"",[FileName]));
closefile(f);
ShellExecute(Handle, "Open", PChar(FileName), nil, nil, sw_hide);
end;

Автор ответа: Vit"
http://forum.vingrad.ru/



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

Форум: "WinAPI";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
1-63098
SDan
2004-01-08 13:20
2004.01.20
Как работает ListBox


3-62984
jen_bond
2003-12-23 20:05
2004.01.20
Вопрос по нумерации


1-63064
Alex SPA
2004-01-08 10:19
2004.01.20
Открыть файл *.doc (через программу конечно) без предупреждения.


1-63118
diMAN
2004-01-06 15:11
2004.01.20
Преобразование произвольной строки в TDateTime


1-63142
Mihey
2004-01-06 21:41
2004.01.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский