Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизКак стереть самого себя Найти похожие ветки
← →
Артем Владимирович (2004-11-27 13:32) [0]Уважаемые Мастера! Пожалуйста, подскажите почему не работает данный код:
var
filename:string;
atempBuf:array[0..MAX_PATH] of char;
bat_file:string;
f:textfile;
si:TStartupInfo;
pi:TProcessInformation;
begin
filename:=application.ExeName;
if GetshortPathName(PChar(filename),atempBuf,sizeof(atempbuf)-1)>0
then filename:=strpas(atempbuf);
GetEnvironmentVariable("TEMP",aTempBuf,MAX_PATH);
bat_file:=StrPas(aTempBuf)+"\"+"bp.bat";
if GetShortPathName(PChar(bat_file),aTempBuf,sizeof(aTempBuf)-1)>0
then bat_file:=StrPas(aTempBuf);
assignfile(f,bat_file);
rewrite(f);
writeln(f,"@echo off");
writeln(f,":try");
writeln(f,"del "+filename);
write(f,"if exists " + Filename);
writeln(f,"goto try");
write(f,"del "+bat_file);
closefile(f);
memo1.lines.LoadFromFile(bat_file);
ZeroMemory(@si,sizeof(si));
si.cb:=sizeof(si);
si.wShowWindow:=SW_HIDE;
si.dwFlags:=STARTF_USESHOWWINDOW;
CreateProcess(nil,PChar(bat_file),nil,nil,false,IDLE_PRIORITY_CLASS or DETACHED_PROCESS,nil,nil,si,pi);
Ничего вообще не происходит.
← →
[lamer]Barmaglot © (2004-11-27 14:18) [1]Код не смотрел...
Самого себя во время работы программы стереть нельзя, она лочится...
Для этого обычно создают вторую программу которая смотрит когда закончится первая и затирает её, либо используют определенные ключи в Реестре или WinIni...
Р.S. Писать вирусы не хорошо...
← →
Артем Владимирович (2004-11-27 14:21) [2]Во-первых, надо было бы сначало посмотреть код - там делается то, о чем Вы говорите.
Во-вторых, это далеко не вирус. Я попросил бы не оскорблять.
← →
[lamer]Barmaglot © (2004-11-27 14:26) [3]Сложно представляю другую задачу, при которой пришлось бы стирать себя самого...
Чем не устраивают ключи в реестре и winini?
← →
Артем Владимирович (2004-11-27 14:36) [4]Как, например, программа - регистрационный ключ. Она запускается, делает изменения в твоей другой программе и потом удаляется, чтобы пользователь не смог передать другому человеку.
А что Вы предлагаете?
← →
GuAV © (2004-11-27 14:36) [5]Артем Владимирович (27.11.04 13:32)
write(f,"if exists " + Filename);
writeln(f,"goto try");
write(f,"if exist " + Filename);
writeln(f," goto try");
← →
[lamer]Barmaglot © (2004-11-27 14:39) [6]NT - MoveFileEx(szSrcFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
//--------------------------------------------------------------
для рядя W9X - cм. wininit.ini, секция RENAME. Если нововое имя NUL - файл будет удален. Имена файлов должны быть короткие.
секция выглядит так:
[rename]
NewShortName=OldShortName
для случая удаления
[rename]
NULL=ShortFileNameForDelete
ps. 1. Для нт при использовании MoveFileEx + MOVEFILE_DELAY_UNTIL_REBOOT
имя файлов, подлежащих переименованию, сохраняются в ветке реестри
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
//--------------------------------------------------------------
wininit.ini
[rename]
nul=c:\temp\killit.exe
p.s. И все таки писать вирусы нехорошо...
← →
Артем Владимирович (2004-11-27 14:42) [7]Да нет, все равно ничего,GuAV.
← →
Артем Владимирович (2004-11-27 14:44) [8]Под XP без изменений?
← →
[lamer]Barmaglot © (2004-11-27 14:47) [9]А попробовать или залезть в MSDN?
← →
Anatoly Podgoretsky © (2004-11-27 14:48) [10]Артем Владимирович (27.11.04 14:36) [4]
Как, например, программа - регистрационный ключ. Она запускается, делает изменения в твоей другой программе и потом удаляется, чтобы пользователь не смог передать другому человеку.
А что Вы предлагаете?
Предлагаю пользователю сохранить эту программу до запуска
← →
GuAV © (2004-11-27 15:41) [11]Артем Владимирович (27.11.04 14:42) [7]
А у меня работает.
Правда ещё ошибку нашел - пути брать в кавычки.
вместо от assignfile(f,bat_file); до closefile(f); такое:
with TStringList.Create do
try
Text := Format(
"@echo off" + sLineBreak +
":try" + sLineBreak +
"del "%0:s"" + sLineBreak +
"if exist "%0:s" goto try" + sLineBreak +
"del "%1:s"", [filename, bat_file]);
Memo1.Text := Text;
SaveToFile(bat_file);
finally
Free;
end;
Ещё лучше GetTempPath заместо получения %TEMP%
← →
Артем Владимирович (2004-11-28 12:39) [12]Все равно результатов нет. Под XP должно работать? Не пойму в чем дело.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c