Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.86 MB
Время: 0.065 c
1-1101805503
Vitaliygavrilov
2004-11-30 12:05
2004.12.12
Возможность загрузки базы данных в Listview


3-1100185653
gedd
2004-11-11 18:07
2004.12.12
Поместить файл в базу данных


14-1100725032
GanibalLector
2004-11-17 23:57
2004.12.12
1C


4-1099031409
Shiza
2004-10-29 10:30
2004.12.12
Возможно ли если на одной линии находятся модем и телефон


4-1098954862
Ivolg
2004-10-28 13:14
2004.12.12
Диски





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский