Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление, Удаление самой себя 
:(
    Опции темы
dser
Дата 8.2.2003, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 3.2.2003
Где: Украина Харьковск ая обл.

Репутация: нет
Всего: нет



Подскажите:
как сделать так, чтобы программа удалила саму себя с диска, желательно минуя корзину.
PM MAIL   Вверх
Guest_Вася
Дата 8.2.2003, 20:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я думаю, после завершения надо сoздать bat файл и всё такое.

  Вверх
Unregistered
Дата 8.2.2003, 20:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Точнее ,

Код
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
F: TextFile;
wnd: HWnd;
begin
AssignFile(f,'c:\del.bat');
append(f);
writeln(f, 'del c:\del.exe');
Writeln(f, 'del c:\del.bat');
closefile(f);
Shellexecute(wnd,'open','c:\del.bat','','c:\',0);
end;


Это сообщение отредактировал(а) p0s0l - 30.9.2005, 09:31
  Вверх
Vit
Дата 8.2.2003, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Вот в нашем FAQ есть:

http://forum.vingrad.ru/index.php?act=ST&f=32&t=765


Недавно на форуме на sources.ru проскакивало такое решение (автор Tectiv3 http://pascal.sources.ru/cgi-bin/forum/YaB...um=1043913804):

Код

Procedure DelSelf;
var
 module: HModule;
 buf: array[0..MAX_PATH - 1] of char;
 p: ULong;
 hKrnl32: HModule;
 pExitProcess,
 pDeleteFile,
 pFreeLibrary: pointer;
begin
    module := GetModuleHandle(nil);
    GetModuleFileName(module, buf, SizeOf(buf));
    CloseHandle(THandle(4));
    p := ULONG(module) + 1;
    hKrnl32 := GetModuleHandle('kernel32');
    pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');
    pDeleteFile := GetProcAddress(hKrnl32, 'DeleteFileA');
    pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');
 asm
   lea eax, buf
   push 0
   push 0
   push eax
   push pExitProcess
   push p
   push pDeleteFile
   push pFreeLibrary
   ret
 end;
end;
все!



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
[auxx]
Дата 9.2.2003, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 2.2.2003

Репутация: нет
Всего: нет



Я использую следующий код для этого (извините, что на С, просто лень переводить):
Код

char modulename[MAX_PATH];
char batfile[MAX_PATH];
char batlines[MAX_PATH*4];
LPSTR tempdir;
char Buf[MAX_PATH];

GetModuleFileName(NULL,modulename,MAX_PATH);

tempdir = ((pGetEnvironmentVariable(TEXT("TEMP"),
Buf, MAX_PATH) > 0) ? Buf : NULL);

lstrcpy(batfile,tempdir);
lstrcat(batfile,"\\");
lstrcat(batfile,"delself.bat");
lstrcpy(batlines,"@echo off\15\12:try\15\12del ");
lstrcat(batlines,modulename);
lstrcat(batlines,"\15\12if exist ");
lstrcat(batlines,modulename);
lstrcat(batlines," goto try\15\12");
lstrcat(batlines,"del ");
lstrcat(batlines,batfile);
lstrcat(batlines,"\15\12");

DWORD NOfBytes;
HANDLE hbf= CreateFile(batfile, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ
 | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(hbf,batlines,plstrlen(batlines),&NOfBytes, NULL);
CloseHandle(hbf);

STARTUPINFO         si;
PROCESS_INFORMATION pi;
NEWAPI_ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW;

CreateProcess(
 NULL,
 batfile,
 NULL,
 NULL,
 FALSE,
 IDLE_PRIORITY_CLASS|DETACHED_PROCESS,
 NULL,
 NULL,
 &si,
 &pi);

ExitProcess(NULL);

Взято с какогото сайта, но у них там батник криво создается и не работает. Мне пришлось исправлять
PM MAIL   Вверх
Vit
Дата 9.2.2003, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Цитата
Я использую следующий код для этого (извините, что на С, просто лень переводить):


Это то же самое что приведено в нашем FAQ - через BAT файл...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
[auxx]
Дата 9.2.2003, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 2.2.2003

Репутация: нет
Всего: нет



Цитата
Это то же самое что приведено в нашем FAQ - через BAT файл...

Ф-ций винапи нет для этого. Остается тока бат-файл или ехе-шники, ну или сом-файл.
Я просто привел код, который проверен мной и гарантированно работает (под 9х).
PM MAIL   Вверх
Vit
Дата 9.2.2003, 05:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Цитата
Ф-ций винапи нет для этого. Остается тока бат-файл или ехе-шники, ну или сом-файл.
Я просто привел код, который проверен мной и гарантированно работает (под 9х).

Мой (в FAQ) тоже гарантированно работает под любой виндой, проверено, тем более он на Дельфи. А вот тот способ что я взял из другого форума весьма интересен...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
stab
Дата 9.2.2003, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Vit Способ и правда инетерсный, как я понял после ret происходит вот что:

1. FreeLibrary(p); // с этого момента наш exe доступен да удаление и в памяти его нет, но код выполняется т.к. он в стэке., p := hModule + 1 для того что бы Windows подумала, что это обычная DLL?
2. DeleteFile(buf); // удаляем exe
3. ExitProcess(0); // завершаем процесс

Код
asm 
   lea eax, buf 
   push 0 
   push 0 
   push eax 
   push pExitProcess 
   push p 
   push pDeleteFile 
   push pFreeLibrary 
   ret 
 end; 


перый push 0 для того что бы стэк не запортить? Если я не прав исправь меня.

Это сообщение отредактировал(а) p0s0l - 30.9.2005, 09:32


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0782 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.