Подробности

Решение нерешаемых задач в программированииПриветствую всех моих читателей!

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

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

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

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

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

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

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

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

You have no rights to post comments