1 (изменено: Kaede, 2012-04-27 14:47:22)

Тема: AHK: Как удалить файл после цикла

Тестирую программы(запуск, установка, удаление), написал скрипт:

#NoTrayIcon
Loop 2
{
...
}
Return

Исполняется нормально, но как удалить установочный файл после этого цикла? Пробовал так: FileDelete ,C:\Test\*.exe, не удаляется, если записать в цикл, то повторно не смогу установить так как не будет установочного файла.

2

Re: AHK: Как удалить файл после цикла

Если файл не удаляется, значит он ещё занят, и нужно ожидать, когда его процесс завершится. Для этого запускать его следует так:

Run, MyProg.exe,,, PID

Тогда в переменной PID сохранится идентификатор его процесса. После твоего цикла следует выполнить такой:

Loop
{
   Sleep, 1000
   Process, Exist, PID
   if !ErrorLevel
   {
      FileDelete, FilePattern
      break
   }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Irbis, 2012-04-27 15:48:05)

Re: AHK: Как удалить файл после цикла

А в чем разница, в цикле удаление или после него? Раз в цикле нормально удаляет, а после - нет, значит или до этой команды очередь не доходит, или после цикла EXE установщика остается в памяти, и препятствует удалению.

UPD: teadrinker уже написал решение, хотя и описанный мной 1ый вариант проблемы часто имеет место быть

4

Re: AHK: Как удалить файл после цикла

Вы меня наверное неверно поняли. Алгоритм действия отбросив детали таков:
1.Установка
2.Запуск
3.Удаление
4.Удаление установщика
Внутри цикла, у меня есть, цикл завершения процесса:

Loop, C:\Dorst\*.exe
{
   Process, Exist, %A_LoopFileName%
   if ErrorLevel
   {
      WinClose, ahk_pid ErrorLevel,,2
      Process, Exist, %A_LoopFileName%
      if ErrorLevel
         Process, Close, %A_LoopFileName%
   }
}

Что получается, я завершаю процесс, и потом удаляю саму программу через ее инсталлятор. В процессах ее уже нет. Теперь мне надо удалить сам файл из которого шла установка. Сам файл спокойно удаляется, но не через FileDelete.

5

Re: AHK: Как удалить файл после цикла

Тогда нужно посмотреть в свойствах файла, не стоит ли галка "read-only". Ну и FilePattern проверить.

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

6 (изменено: Kaede, 2012-04-27 16:58:37)

Re: AHK: Как удалить файл после цикла

Сейчас проверил исключением, после удаления программы, просто FileDelete удаляет файл установщика, а в скрипте после Return нет. Return возвращает в начало скрипта и как только он исполняется 2 раза по идее должен перейти к строке с FileDlete и исполнить ее, но почему то перехода нет.

7

Re: AHK: Как удалить файл после цикла

По всей видимости, ты плохо понимаешь действие команды Return.

If there is no caller to which to return, Return will do an Exit instead.

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

8 (изменено: Irbis, 2012-04-27 17:37:19)

Re: AHK: Как удалить файл после цикла

Что-то я в скрипте не наблюдаю комманды FileDelete. Зачем её выносить куда-то, если её место в цикле (ИМХО ) ?

dir = C:\Dorst\
Loop, %dir%*.exe
{
   Process, Exist, %A_LoopFileName%
   if ErrorLevel
   {
      WinClose, ahk_pid ErrorLevel,,2
      Process, Exist, %A_LoopFileName%
      if ErrorLevel
         Process, Close, %A_LoopFileName%
		 Process, WaitClose, %A_LoopFileName%, 2
   }
   FileDelete, %dir%%A_LoopFileName%
}

9 (изменено: Kaede, 2012-04-27 18:18:51)

Re: AHK: Как удалить файл после цикла

Так было бы справедливо, если бы не надо было устанавливать, запускать, удалять, несколько раз. В C:\Test\*.exe находится установочный файл, из которого программа устанавливается в C:\Dorst\*.exe. Если FileDelete для C:\Test\*.exe будет в цикле, повторной автоматической установки уже не будет, так как не будет файла установщика. Поэтому и вынос за цикл. Следом за завершением процесса следует деинсталяция C:\Dorst\*.exe:

Run, C:\WINDOWS\system32\msiexec.exe /x {...}

Попробовал убрать только цикл:

Loop 2
{
}
Return

Устанавливается, запускается, удаляется, и что интересное установщик тоже, на ура, почему с циклом не так, не понятно.

10

Re: AHK: Как удалить файл после цикла

Kaede, прочитай внимательно этот пост. Return лишний.

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

11

Re: AHK: Как удалить файл после цикла

Прошу прощения, немного упустил из виду. Все понял.