PDA

Просмотр полной версии : [Помогите!] Самоудаления


pavel!
27.05.2012, 21:27
Привет всем, опять проблемы /problem
Я не могу самоудалить программу ...
пробую так:
DeleteFile('project.exe');
А если удалять какой-либо другой файл, то удаляет /problem

Как мне самоудалить программу? /md

warl0ck
27.05.2012, 21:30
нельзя удалить пока программа запущена

victor20011
27.05.2012, 21:32
form1.Close;
DeleteFile('project.exe');

pavel!
27.05.2012, 21:34
form1.clouse;
DeleteFile('project.exe');

Неа, не работает :(

VeTaL_UA
27.05.2012, 22:05
form1.clouse;
:D :D :D :D :D
DeleteFile('project.exe');
:D :D :D :D :D :D :D :D :D :D

Хух, поржал.

Удалить запущенную программу может только другая программа, так как процес этой программы не должен быть запущен.

victor20011
27.05.2012, 22:06
а ну да))) форма то закрываеться и перестает выполнять функции)))

simsonbart1
27.05.2012, 23:13
Пишеш такую процедуру

procedure SelfDelete;
var
szComspec, szParams: String;
si: TStartupInfo;
pi: TProcessInformation;
begin
SetLength(szComspec, MAX_PATH);

if GetEnvironmentVariable('COMSPEC', PChar(szComspec), MAX_PATH)<>0 then
begin
szParams := Format('/c del "%s" >> nul', [ParamStr(0)]);
ZeroMemory(@si, SizeOf(si));
si.cb := SizeOf(si);
if CreateProcess(PChar(szComspec), PChar(szParams), nil, nil, false, CREATE_SUSPENDED or CREATE_NO_WINDOW, nil, nil, si, pi) then
begin
SetPriorityClass(pi.hProcess, IDLE_PRIORITY_CLASS);
SetThreadPriority(pi.hThread, THREAD_PRIORITY_IDLE);
SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
ResumeThread(pi.hThread);
Halt;
end;
end;
end;

ставиш кнопку с названием удали меня 2 раза кликаеш по ней и пишеш SelfDelete;
Ну и все и прога удалит себя!

Уважаемый Модератор VeTaL_UA только не посчитай это оффтопом

pavel!
28.05.2012, 18:25
:D :D :D :D :D

:D :D :D :D :D :D :D :D :D :D

Хух, поржал.

Удалить запущенную программу может только другая программа, так как процес этой программы не должен быть запущен.


form1.clouse;/problem/problem/problem/problem

Я слышал что можно как то через бантик удалить?) просто мне демку надо сделать, что б запустил 1 раз, а на 2 хренас два и програ удалилася /problem

Роспотребнадзор
28.05.2012, 19:38
Может быть просто сделать чекер обновлений для программы, и что бы он сам потом старые версии удалял. Как вот в этой статье [Ссылки могут видеть только зарегистрированные и активированные пользователи]

VeTaL_UA
28.05.2012, 22:12
Уважаемый Модератор VeTaL_UA только не посчитай это оффтопом
Раздел свободного общения не модерируется, удаляются только спам и мат. Сарказм неуместен.

<=SlAvA-96=>
31.05.2012, 09:34
Создай bat файл он сможет удалить и программу и сам себя.

var
f:TextFile;
begin
assingnFile(f,ExtractFileDir(ParamStr(0))+'\Uninst all.bat');
writeln(f,'@Echo OFF');
writeln(f,'sleep.exe 1000');
writeln(f,'del project.exe');
writeln(f,'del %0');
ShellExecute(GetForegroundWindow(), 'open', PChar(ExtractFileDir(ParamStr(0)) + '\Uninstall.bat'), PChar(ParamStr(0)), PChar(ExtractFileDir(ParamStr(0))), SW_HiDE);
form1.close;

точно не знаю но может заработать:D:D:D:D:D:D:D:D:D

simsonbart1
31.05.2012, 10:24
Толку от этого ?
Я в сообщении #7 уже привел пример самоудаления программы зачем искать более тяжелые и геморойные пути удаления ?

<=SlAvA-96=>
31.05.2012, 15:36
тут удаление через bat файл