1

Тема: AHK: Самоуничтожение exe

Здравствуйте!
Задача: после выполнения скрипта удалить файл скрипта.
В случае sample.ahk нет сложностей, FileDelete %File%. Как быть при преобразовании в sample.exe? Запущенный exe Виндовс не позволяет удалить.
Возможно ли это в принципе? В какую сторону смотреть?

2

Re: AHK: Самоуничтожение exe

Run %comspec% /c del "%A_ScriptFullPath%",, hide

3

Re: AHK: Самоуничтожение exe

Flasher, а если так:

#Persistent
Run %comspec% /c del "%A_ScriptFullPath%",, hide
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Самоуничтожение exe

teadrinker, ExitApp в конец.

5

Re: AHK: Самоуничтожение exe

Не всегда срабатывает, проверил. Вообще, где гарантия, что когда cmd.exe начнёт удалять файл, его процесс уже завершится?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Самоуничтожение exe

Flasher пишет:
Run %comspec% /c del "%A_ScriptFullPath%",, hide

Спасибо.
А почему не работает, будучи вставлен в середину? Только перед ExitApp.

7

Re: AHK: Самоуничтожение exe

teadrinker пишет:

Вообще, где гарантия, что когда cmd.exe начнёт удалять файл, его процесс уже завершится?

Какая разница, что родительский процесс завершился? cmd запущен и ладно.


concept.ru пишет:

А почему не работает, будучи вставлен в середину? Только перед ExitApp.

В какую середину, если нужно по завершению скрипта? Именно перед ExitApp, т.к. cmd ждёт в трее пару секунд, пока процесс освобождается.

8

Re: AHK: Самоуничтожение exe

Flasher пишет:

Какая разница, что родительский процесс завершился? cmd запущен и ладно.

Ты не понял. В том-то и проблема, что родительский процесс может не успеть завершиться перед удалением файла, соответственно фейл.

teadrinker пишет:

Не всегда срабатывает, проверил

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Самоуничтожение exe

teadrinker
Не подтверждаю. 2-3 секунд вполне хватает.

10

Re: AHK: Самоуничтожение exe

Ещё раз проверил — не всегда срабатывает. Корректный алгоритм — сначала проверить, существует ли родительский процесс, потом только удалять.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Самоуничтожение exe

Может, проще секунду выждать?

#Persistent
Run %comspec% /c timeout /t 1 && del "%A_ScriptFullPath%",, hide
ExitApp

12

Re: AHK: Самоуничтожение exe

А где написано, что процесс гарантированно завершится через секунду, или даже через две? Вдруг подвиснет немного?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13 (изменено: Flasher, 2016-04-16 17:07:18)

Re: AHK: Самоуничтожение exe

А причина подвисания в чём?
Давай ещё один вариант рассмотрим:

#Persistent
PID := DllCall("GetCurrentProcessId")
Run %comspec% /c taskkill /pid %PID% /f & del "%A_ScriptFullPath%",, hide
ExitApp

14

Re: AHK: Самоуничтожение exe

AHK: Самоуничтожение скомпилированого скрипта
AHK: Как реализовать uninstall

Забыл пароль и потерял e-mail.

15

Re: AHK: Самоуничтожение exe

Без переменной:

#Persistent
Run % comspec " /k taskkill /pid " DllCall("GetCurrentProcessId") " /f & del """ A_ScriptFullPath """",, hide
ExitApp
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

16

Re: AHK: Самоуничтожение exe

Так лучше. У меня некоторый внутренний протест вызывает принудительное убийство процесса, но это вопрос эстетики.
По ссылкам выше ещё варианты.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder