Приветствую всех моих читателей!

За многолетнюю практику быдлокодерства я много раз сталкивался с «неразрешимыми задачами». Некоторые из них остались неразрешенными, некоторые разрешились извращенным способом, а какие-то довольно элегантно, имхо.

Вот этими задачами и возможными решениями я и хочу поделиться. Приветствуются комментарии и собственные решения!

Самоудаление?

Иногда очень хочется, чтобы программа себя удалила, когда закончит свою работу.

Эксперимент:

Private Sub Form_Load()
Kill App.Path & "\1.exe"
End Sub

Компилим 1.exe

Запускаем и получаем сообщение об ошибке.

Правильно! Ну, не может программа удалить файл, из которого она загружена!

Можно сделать еще один экзешник, и при завершении проги его запускать, а уж он-то с этой задачей справится… Можно пойти дальше, и код этого экзешника хранить в проге и в нужный момент сохранить на диск, а затем запустить.

Решил задачу попроще:

Private Sub Form_Unload(Cancel As Integer)
p = App.Path
If Right(p, 1) <> "\" Then p = p & "\"
t = p
p = p & "killer.vbs"
Open p For Output As #1
Print #1, "Msgbox ""На этом программа заканчивает свою работу..."""
Print #1, "Set fsys = CreateObject(""scripting.filesystemobject"")"
Print #1, "fsys.deletefile """ & t & "1.exe"""
Close #1
Call Shell("explorer.exe " & p)
End Sub

У этого решения есть недостатки:

  1. остается на диске файлик «killer.vbs»;
  2. на некоторых компах заботливая винда выдает окошко

Ошибка при выполнении killer.vbs

Придумывать более кошерное решение не было времени, да и надобность отпала…

Жду «жалоб и предложений».

Вам может быть интересно