![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как стереть самого себя [D6, WinXP]
Артем Владимирович © (2004-11-27 13:32:00)Уважаемые Мастера! Пожалуйста, подскажите почему не работает данный код:
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);
Ничего вообще не происходит.
Артем Владимирович (2004-11-28 12:39:00) [1]Все равно результатов нет. Под XP должно работать? Не пойму в чем дело.
GuAV (2004-11-27 15:41:00) [2]Артем Владимирович (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%
Anatoly Podgoretsky (2004-11-27 14:48:00) [3]Артем Владимирович (27.11.04 14:36) [4]
Как, например, программа - регистрационный ключ. Она запускается, делает изменения в твоей другой программе и потом удаляется, чтобы пользователь не смог передать другому человеку.
А что Вы предлагаете?
Предлагаю пользователю сохранить эту программу до запуска
[lamer]Barmaglot (2004-11-27 14:47:00) [4]А попробовать или залезть в MSDN?
Артем Владимирович (2004-11-27 14:44:00) [5]Под XP без изменений?
Артем Владимирович (2004-11-27 14:42:00) [6]Да нет, все равно ничего, GuAV.
[lamer]Barmaglot (2004-11-27 14:39:00) [7]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:36:00) [8]Как, например, программа - регистрационный ключ. Она запускается, делает изменения в твоей другой программе и потом удаляется, чтобы пользователь не смог передать другому человеку.
А что Вы предлагаете?
GuAV (2004-11-27 14:36:00) [9]Артем Владимирович (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:26:00) [10]Сложно представляю другую задачу, при которой пришлось бы стирать себя самого...
Чем не устраивают ключи в реестре и winini?
Артем Владимирович (2004-11-27 14:21:00) [11]Во-первых, надо было бы сначало посмотреть код - там делается то, о чем Вы говорите.
Во-вторых, это далеко не вирус. Я попросил бы не оскорблять.
[lamer]Barmaglot (2004-11-27 14:18:00) [12]Код не смотрел...
Самого себя во время работы программы стереть нельзя, она лочится...
Для этого обычно создают вторую программу которая смотрит когда закончится первая и затирает её, либо используют определенные ключи в Реестре или WinIni...
Р.S. Писать вирусы не хорошо...