Главная страница
    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.041 c
1-1135367246
oleg_
2005-12-23 22:47
2006.01.29
Процедура отъедает GDI handle


15-1136470151
Desdechado
2006-01-05 17:09
2006.01.29
Что стало с ibase.ru ?


2-1137076824
worldmen
2006-01-12 17:40
2006.01.29
Из Paradoxa 7 в другую БД.


15-1136633796
TUser
2006-01-07 14:36
2006.01.29
Хочу залогинится


6-1129418965
Baltunix
2005-10-16 03:29
2006.01.29
Нет возможности отправки SMS при помощи POST





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