Форум: "Начинающим";
Текущий архив: 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.041 c