Самоудаление программы

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 356
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Самоудаление программы

Сообщение Diamock » 14.09.2011 (Ср) 17:49

Пример кода самоудаления программы. Подробности во вложении.
У вас нет доступа для просмотра вложений в этом сообщении.
In der Beschrankung zeigt sich erst der Meister
Visual Basic Russian Knowledge Base

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16073
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Самоудаление программы

Сообщение Хакер » 14.09.2011 (Ср) 17:56

Эта ерунда сразу по ряду разных причин.

0) Исходный код внутри chm внутри zip. Да ещё и логотип оформление форма, его логотип и стиль phpBB себе взял. Ссылок ни на vbstreets, ни на phpbb, ни на subsilver нет, зато свой копирайт вписал... кликабельное лого не в счёт.
1) Замечания по работоспособности:
  • Это не будет работать, если пусть содержит символы, которые не смогут преобразоваться в ANSI.
  • Это не будет работать, если путь не уместится в 255-буфер.
  • Это не будет работать, если приложение запущено с шары, потому что насколько я помню, хотя и могу ошибаться, в ранних версиях del не поддерживает UNC-пути.
  • Это не будет работать, если главный процесс не успеет завершиться к тому моменту, когда процесс del очухается. С проектом с одной формой это прокатывает, но с чем-то солидным не прокатит. Никакой синхронизации нет, никакого ожидания нет. Единственное, что есть — авось. Более того, нигде в сопроводительной документации, в большом красочном chm или в самом коде не декларируется необходимость скорейшего завершения процесса после вызова твоей чудо-функции.
2) Замечания по стилю:
  • Используется куча API-функцией, при том без особой основы. Вместо GetModuleFileName можно использовать App.Path, вместо GetEnvironmentVariable — Environ, вместо ShellExecuteEx — Shell. Или как минимум использовать юникодные версии функций.
  • Не исповедуется принцип, в соответствии с которым программа разделяется на компоненты, и как минимум декларируются обязанности одних компонентов перед другими. Вообще нет, не описано, кто что кому обязан передать, в каких условиях вызвать, какие формальности соблюсти. Ну нет ничего такого. Не красиво. Не правильно.
  • В частности, не декларируется, что вызывающая сторона должна после вызова должна скорейшим образом позаботиться о завершении процесса. Человек с правильным мозгом предположит, что раз такая необходимость нигде не декларируется, значит вызываемая функция сама берёт на себя ответственность за это. И проиграет. Человек с неправильным мозгом начнёт гадать, и скорее всего угадает. В общем, полнейшая несправедливость: код расчитан на плохо-поступающих, а не наоборот.
3) Вообще:
Я считаю, что само по себе желание получить самоудаляющийся EXE-файл — бред, извращение, и противоестественно. Во-первых, есть такое хорошее правило: кто породил файл (любой), тот его и имеет право удалять. Поскольку EXE-файл сам себя не порождал, он и удалять себя не имеет права. Если система позволит ему такое, что ж, грустно, но остаётся неприятный осадок. А в хороших случаях самоудаление не получится из-за ограничений прав пользователей на манипуляции с файлами. Ну а во-вторых, исходя из первого, в системе не предусмотрено такое действие, а по этой причине, имеется невероятно количество технических проблем, которые могут встретиться на пути самоудаления.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 356
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Самоудаление программы

Сообщение Diamock » 14.09.2011 (Ср) 18:01

Хакер писал(а):Эта ерунда сразу по ряду разных причин.

Очень хочется, пояснений почему? И не просто, что это отвратный код, а конкретно по каким причинам, что бы знать и не допускать такого в дальнейшем. :(
С уважением...
In der Beschrankung zeigt sich erst der Meister
Visual Basic Russian Knowledge Base

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16073
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Самоудаление программы

Сообщение Хакер » 14.09.2011 (Ср) 19:07

Diamock писал(а):Очень хочется, пояснений почему?

Я сначала занял место под сообщение, а потом дописал сообщения.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 356
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Самоудаление программы

Сообщение Diamock » 14.09.2011 (Ср) 19:57

Хакер, большое спасибо за развёрнутый комментарий!
In der Beschrankung zeigt sich erst der Meister
Visual Basic Russian Knowledge Base

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2751
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 14.09.2011 (Ср) 20:27

А можно ли удалить exe-файл не завершая выполнение? Для программ, скомпилированных в Borland C++ 3.1 это было возможно. А как такое проделать с современными программами?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16073
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Самоудаление программы

Сообщение Хакер » 14.09.2011 (Ср) 20:33

Qwertiy писал(а):А можно ли удалить exe-файл не завершая выполнение?

32-битный — однозначно нет. Если только найдя дыру в Windows.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2843
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Самоудаление программы

Сообщение Proxy » 14.09.2011 (Ср) 21:15

Я считаю, что само по себе желание получить самоудаляющийся EXE-файл — бред, извращение, и противоестественно. Во-первых, есть такое хорошее правило: кто породил файл (любой), тот его и имеет право удалять.

Uninstall.exe
Посредством функционала ОС, но тем не менее можно сказать, что удаляет всё, в т.ч. и себя. Почти везде, где инсталляция проводилась сторонним инсталлятором.
Follow the white rabbit.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4247
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Самоудаление программы

Сообщение iGrok » 14.09.2011 (Ср) 22:38

Proxy писал(а):Uninstall.exe

Для этого есть вполне штатный механизм отложенных файловых операций (в т.ч. и удаления) в виде MoveFileEx.
А вот кому и зачем может понадобиться себя удалить "прямо сейчас" (кроме, разве что троян-дроппера), я не знаю.
label:
cli
jmp label

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Самоудаление программы

Сообщение Debugger » 14.09.2011 (Ср) 23:03

Uninstall.exe должен же как-то самоуничтожиться.
Программист - это локальный бог (С) Я

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4247
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Самоудаление программы

Сообщение iGrok » 15.09.2011 (Чт) 0:18

Debugger писал(а):Uninstall.exe должен же как-то самоуничтожиться.

:?: :shock:
label:
cli
jmp label

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2843
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Самоудаление программы

Сообщение Proxy » 15.09.2011 (Чт) 6:43

iGrok писал(а):Для этого есть вполне штатный механизм отложенных файловых операций
Proxy писал(а):Посредством функционала ОС, но тем не менее можно сказать, что удаляет всё, в т.ч. и себя.

Сразу или нет — сути не меняет, с тем же успехом можно записать в файл абракадабру, переименовать во что-то безобидное и удалить после. Или собрать bat, удалить им, а bat сам себя удалит в итоге.
iGrok писал(а):А вот кому и зачем может понадобиться себя удалить "прямо сейчас" (кроме, разве что троян-дроппера), я не знаю.

Ну на подобный сабжу топик я натыкаюсь уже раз так десятый, может кому и надо, раз так стараются. Цели создания автор не раскрывает.
Follow the white rabbit.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Самоудаление программы

Сообщение Debugger » 15.09.2011 (Чт) 21:30

iGrok писал(а):
Debugger писал(а):Uninstall.exe должен же как-то самоуничтожиться.

:?: :shock:

Деинсталлятор удаляет папки программы, саму программу, а себя оставляет?
* это ответ на
А вот кому и зачем может понадобиться себя удалить "прямо сейчас" (кроме, разве что троян-дроппера), я не знаю.
Программист - это локальный бог (С) Я

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4247
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Самоудаление программы

Сообщение iGrok » 15.09.2011 (Чт) 21:51

Ты тему-то перечитай ещё раз.. :D

Моё удивление было вызвано исключительно тем, что первая часть моего поста и была ответом на предположение Proxy про Uninstall.exe. И там написано КАК ИМЕННО Uninstall.exe себя должен удалять. Поэтому "Uninstall.exe", по логике, ну никак не может быть ответом на процитированное. :D
label:
cli
jmp label

Teranas
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Самоудаление программы

Сообщение Teranas » 19.10.2016 (Ср) 23:32

На самом деле всё просто, кода речь идёт об UnInstall:
Программа UnInstall.exe удаляет всё по списку, файлы, ключи реестра.
Далее создаёт во временном каталоге *.bat файл:
Код: Выделить всё
'-----------------------------------------
@Echo off
ping 127.0.0.1 -n 3  > nul ' Пауза для ожидания завершения программы UnInstall.exe
rd/s/q DelDir1       > nul ' Главное меню (User)
rd/s/q DelDir2       > nul ' Главное меню (ALL)
taskkill /F /IM
rd/s/q GetMePath     > nul ' Каталог программы
del/q DefBat         > nul ' Сам файл ~UnI0.bat
'-----------------------------------------

и готово.
UnInstall.exe создаёт батник и запускает его, завершается сам.
Батник удаляет каталог программы вместе с UnInstall.exe и удаляет себя.
Если есть более изящное решение, пишите...
С уважением, Андрей.

The trick
Постоялец
Постоялец
 
Сообщения: 495
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Самоудаление программы

Сообщение The trick » 20.10.2016 (Чт) 0:45

UA6527P


Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList