Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.12;
Скачать: CL | DM;

Вниз

Как стереть самого себя   Найти похожие ветки 

 
Артем Владимирович   (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
6-1096286797
andrey__
2004-09-27 16:06
2004.12.12
модем. связь между 2-мя компами (её автоматизация)


3-1100604655
Stass
2004-11-16 14:30
2004.12.12
Композитный отчет (QR)


3-1100239591
Layner
2004-11-12 09:06
2004.12.12
А с расширенными ХП под MSSQLServer никто не работал?


3-1100074594
Serguar
2004-11-10 11:16
2004.12.12
Медленное открытие таблицы Paradox


9-1091186589
OSG
2004-07-30 15:23
2004.12.12
Siege of Avalon !!!