Главная страница
    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.47 MB
Время: 0.038 c
1-1101551535
Артем Владимирович
2004-11-27 13:32
2004.12.12
Как стереть самого себя


1-1101733181
denis24
2004-11-29 15:59
2004.12.12
wordApplication


1-1101401049
Руслана
2004-11-25 19:44
2004.12.12
Почему BlockWrite(SaveFile, D, 4) вызывает предупреждение


1-1101443573
_sulent
2004-11-26 07:32
2004.12.12
Шрифты, подскажите?


14-1100858955
TUser
2004-11-19 13:09
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский