Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

Удалить себя   Найти похожие ветки 

 
Viktop   (2006-01-09 20:34) [0]

Подскажите, как программе удалить себя (когда она запущена).
Смотрел на delphiworld, но те примеры не работаю (работают, но несовсем правильно)
program delete2;

uses
 SysUtils, windows;

var
 BatchFile: TextFile;
 BatchFileName: string;
 TM: Cardinal;
 TempMem: PChar;

begin
 BatchFileName:=ExtractFilePath(ParamStr(0))+ "$$336699.bat";

 AssignFile(BatchFile, BatchFileName);
 Rewrite(BatchFile);

 Writeln(BatchFile,":try");
 Writeln(BatchFile,"del "" + ParamStr(0) + """);
 Writeln(BatchFile,"if exist "" + ParamStr(0) + "" goto try");
 Writeln(BatchFile,"del "" + BatchFileName + """);
 CloseFile(BatchFile);

 TM:=70;
 GetMem (TempMem,TM);
 GetShortPathName (pchar(BatchFileName), TempMem, TM);
 BatchFileName:=TempMem;
 FreeMem(TempMem);

 winexec(Pchar(BatchFileName),sw_hide);

 halt;
end.


Этот пример самый рабочий, но удаляет только если в пути нет кирилицы


 
Gero ©   (2006-01-09 20:53) [1]

CharToOem


 
Viktop   (2006-01-09 21:01) [2]

Можно подробнее


 
Gero ©   (2006-01-09 21:20) [3]

F1


 
Viktop   (2006-01-10 07:40) [4]

Delphi 7
Поиск молчит


 
Viktop   (2006-01-10 07:56) [5]

Сделал так:
procedure DeleteSelf;
 function ConvertToDos(S: string): PChar;
 begin
   CharToOEM(PChar(S), PChar(S));
 end;
var
 BatchFile: TextFile;
 BatchFileName: string;
 TM: Cardinal;
 TempMem: PChar;
begin
 BatchFileName := ExtractFilePath(ParamStr(0)) + "$$336699.bat";

 AssignFile(BatchFile, BatchFileName);
 Rewrite(BatchFile);

 Writeln(BatchFile, ":try");
 Writeln(BatchFile, ConvertToDos("del "" + ParamStr(0) + """));
 Writeln(BatchFile, "if exist "" + ParamStr(0) + "" goto try");
 Writeln(BatchFile, "del "" + BatchFileName + """);
 CloseFile(BatchFile);

 TM := 70;
 GetMem(TempMem, TM);
 GetShortPathName(pchar(BatchFileName), TempMem, TM);
 BatchFileName := TempMem;
 FreeMem(TempMem);

 winexec(Pchar(BatchFileName), sw_hide);

 halt;

end;

Теперь всё, что попадает в функцию ConvertToDos становится нечетаемым


 
Viktop   (2006-01-10 07:58) [6]

В указанном выше примере получается так:
:try
S‹ШЂ»2
if exist "C:\Documents and Settings\Администратор\Мои документы\Виктор\3 курс\Работа\Manfred\prog\avto.exe" goto try
del "C:\Documents and Settings\Администратор\Мои документы\Виктор\3 курс\Работа\Manfred\prog\$$336699.bat"


 
AbrosimovA   (2006-01-10 12:57) [7]

Используй тип AnsiString


 
Viktop   (2006-01-10 14:02) [8]

Не помогает
 Writeln(BatchFile, AnsiString(":try"));
 Writeln(BatchFile, AnsiString("del "" + ParamStr(0) + """));
 Writeln(BatchFile, AnsiString("if exist "") + AnsiString(ParamStr(0)) + AnsiString("" goto try"));
 Writeln(BatchFile, AnsiString("del "") + AnsiString(BatchFileName) + AnsiString("""));
 CloseFile(BatchFile);


 
Viktop   (2006-01-10 14:46) [9]

Нашёл!
http://slava.fateback.com/work/articles/selfdel.htm
Метод COMSPEC


 
AbrosimovA   (2006-01-10 15:16) [10]

program delete2;

uses
SysUtils, windows;

var
BatchFile: TextFile;
BatchFileName: string;
TM: Cardinal;
TempMem: PChar;

function WinToDos(const s : string) : string;
var dest : string;
begin
 setLength(dest, length(s)+1);
 AnsiToOem(@s[1], @dest[1]);
 Result:=StrPas(PChar(dest));
end;


begin
BatchFileName:=ExtractFilePath(ParamStr(0))+ "$$336699.bat";

AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);

Writeln(BatchFile,":try");
Writeln(BatchFile,"del "" + WinToDos(ParamStr(0)) + """);
Writeln(BatchFile,"if exist "" + WinToDos(ParamStr(0)) + "" goto try");
Writeln(BatchFile,"del "" + WinToDos(BatchFileName) + """);
CloseFile(BatchFile);

TM:=70;
GetMem (TempMem,TM);
GetShortPathName (pchar(BatchFileName), TempMem, TM);
BatchFileName:=TempMem;
FreeMem(TempMem);

winexec(Pchar(BatchFileName),sw_hide);

halt;
end.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.036 c
2-1137321045
Tonich
2006-01-15 13:30
2006.01.29
Число знаков


15-1136326728
ArtemESC
2006-01-04 01:18
2006.01.29
К HDD и клавиатуре через порты...


3-1132752186
NetName
2005-11-23 16:23
2006.01.29
обновление таблицы ADO


6-1129762535
Scorp123
2005-10-20 02:55
2006.01.29
Как обратится к BIOS материнской платы.


3-1133266091
Sanktum
2005-11-29 15:08
2006.01.29
Not a valid bookmark. (Error 3159)





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