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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
2-1137066955
kami
2006-01-12 14:55
2006.01.29
Определение глобального символа условной компиляции


5-1123525324
Michael5
2005-08-08 22:22
2006.01.29
А как, создав компонент, и добавив туда еще один, использовать


2-1136800381
Foxtrot
2006-01-09 12:53
2006.01.29
Как в SQL использовать CreateIndex (забыл синтаксис)


15-1136474178
BiggieSmalls
2006-01-05 18:16
2006.01.29
Бан на php серваках


3-1133388279
P.V.
2005-12-01 01:04
2006.01.29
транзакции