Главная страница
    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.47 MB
Время: 0.04 c
5-1123669134
stud
2005-08-10 14:18
2006.01.29
кто работал с dxdbgrid


6-1129805396
Aven_
2005-10-20 14:49
2006.01.29
WinInet http auth


15-1135925656
horse
2005-12-30 09:54
2006.01.29
Где играют в шахматы в сети?


15-1136460512
V-A-V
2006-01-05 14:28
2006.01.29
Просмотр графических файлов


15-1136637766
QwertyKz
2006-01-07 15:42
2006.01.29
Ищу старую игру :)





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