1 (изменено: maxspace, 2013-10-30 12:37:21)

Тема: AHK: Автоматический перезапуск слетевшей программы

Здравствуйте уважаемые форумчане! У меня такая проблема, есть программа, которая должна постоянно работать. Периодически она слетает. Помогите, пожалуйста, с написанием скрипта, который бы мониторил запущенную программу и, в случае, если она слетела перезапускал бы её. Спасибо!

2

Re: AHK: Автоматический перезапуск слетевшей программы

AHK: нужна простая команда на закрытие приложения пост №2(мой) тебе нужно совершить обратные действия, а проверку процесса осуществлять через таймер - сам напишешь или нет?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

3

Re: AHK: Автоматический перезапуск слетевшей программы

Слетает - значит её процесс перестаёт существовать или как?

4

Re: AHK: Автоматический перезапуск слетевшей программы

ypppu пишет:

Слетает - значит её процесс перестаёт существовать или как?

да

5

Re: AHK: Автоматический перезапуск слетевшей программы

Indomito пишет:

AHK: нужна простая команда на закрытие приложения пост №2(мой) тебе нужно совершить обратные действия, а проверку процесса осуществлять через таймер - сам напишешь или нет?

к сожалению, нет, только начал разбираться с AHK

6 (изменено: Indomito, 2013-10-30 13:12:34)

Re: AHK: Автоматический перезапуск слетевшей программы

Вот

;-----Инициализация
; Скрипт не выгружается
#Persistent
; Запрет повторного запуска
#SingleInstance
vWin := "Name.exe"
 SetTimer lStartTask, 5000 ; Запускаем менеджер(5 секунд)
 return

;==========Запускаем процесс с именем Name.exe
lStartTask:
DetectHiddenWindows, On
SetTitleMatchMode, 2
IfWinNotExist, %vWin%
  {
    Run %vWin%
    sleep 500 ; Чуть подождём = 0,5 сек
    WinShow
    sleep 150    
   return
  }
return

вроде без ошибок, если только не опечатался

UPD

Всё ошибки исправил, были опечатки   и последствия копи\пасте

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

7

Re: AHK: Автоматический перезапуск слетевшей программы

Indomito спасибо, сейчас проверю.

8 (изменено: Indomito, 2013-10-30 13:34:09)

Re: AHK: Автоматический перезапуск слетевшей программы

Проверь название окна программы, оно может не совпадать с именем EXE-файла, как у меня написано, я закрывал скрытый процесс именно с таким именем окна.
Если не нужно окно показывать или же оно скрытое, то для экономии убери строчки в таймере - lStartTask

    WinShow
    sleep 150 

Для уточнения и справки.

SetTitleMatchMode, MatchMode

MatchMode значения:
- 1 заголовок окна должен начинаться со значения, заданного в WinTitle
- 2 заголовок окна должен содержать значение, заданное в WinTitle
- 3 заголовок окна должен совпадать со значением, заданным в WinTitle


Подправленная часть скрипта(секция таймера)

;==========Запускаем процесс с именем Name.exe
lStartTask:
DetectHiddenWindows, On
SetTitleMatchMode, 2
IfWinNotExist, %vWin%
  {
    Run %vWin%
    WinWait, %vWin%  ;---убрать, если нет видимого окна
    Sleep, 500   
    WinShow                  ;---убрать, если нет видимого окна
    sleep 150                 ;---убрать, если нет видимого окна
   return
 }
return
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

9

Re: AHK: Автоматический перезапуск слетевшей программы

Indomito подскажи, сюда "vWin" мы записываем полный путь до exe-файла? У меня через каждые 5 секунд скрипт запускает новую копию программы, заголовок окна программы постоянно меняется и вообще не совпадает с именем EXE-файла. Как быть в этом случае?

10

Re: AHK: Автоматический перезапуск слетевшей программы

подскажи, сюда "vWin" мы записываем полный путь до exe-файла?

да, просто я закрывал окно типа Hidden, т.е. скрытое.
Со второй часть сейчас исправлю скрипт на детектирование, но у любого процесса всегда есть окно, т.е. главное, а остальные клоны.
Могу процесс конечно проверять... подожди.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

11 (изменено: maxspace, 2013-10-30 14:20:41)

Re: AHK: Автоматический перезапуск слетевшей программы

Могу процесс конечно проверять... подожди.

хорошо

12 (изменено: Indomito, 2013-10-30 15:00:24)

Re: AHK: Автоматический перезапуск слетевшей программы

Как то так по PID-ам (бесконечный цикл)

;-----Инициализация
; Скрипт не выгружается
#Persistent
; Запрет повторного запуска
#SingleInstance
;Без иконки в трее
#NoTrayIcon

nProc:="Name.exe"
tWait:=15 ; 15 секунд ждём процесса nProc 

While (true)
 {
  NewPID:=fnStart() ;Вылетели? Стартуем снова и так до бесконечности....
  While (NewPID)
     NewPID:=fnWait() ; Время истекло получили новый PID, можно сравнить со старым, но я просто проверяю его на  0
  }
  
fnStart()
{
; Формат комады - Run, Target [, WorkingDir, Max|Min|Hide|UseErrorLevel, OutputVarPID]
  Run %nProc%, , , NewPID ,       ;При прописовании WorkingDir не забываем о числе и правильности запятых.
  WinWait ahk_pid %NewPID%   ;ждём хотя бы одно окно процесса
return NewPID
}

fnWait()
{  
  Process, wait, %nProc%, %tWait% 
  NewPID = %ErrorLevel% ; =0 по истечении времени tWait, иначе не 0, т.е. истина.
  return NewPID 
}

бесконечный цикл без таймера.
P.S. PID не меняется пока процесс работает это уже 101%

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

13 (изменено: maxspace, 2013-10-30 14:37:37)

Re: AHK: Автоматический перезапуск слетевшей программы

Indomito спасибо большое, проверю

14

Re: AHK: Автоматический перезапуск слетевшей программы

Там опечатка в названии функции...исправил.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

15 (изменено: Alectric, 2013-10-30 18:01:03)

Re: AHK: Автоматический перезапуск слетевшей программы

Можно же было использовать "Process,Exist", или по пиду менее ресурсо-затратно?
Или это если процессов с таким названием много?

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

16

Re: AHK: Автоматический перезапуск слетевшей программы

Alectric пишет:

Можно же было использовать "Process,Exist"

Можно конечно, но я исходил из:

  1. Я не знал что за задача

  2. Судя по множественности смены титлов - она порождает много окон

  3. Аргумент Exist немного не однозначный, он может вернуть PID самого скрипта, а это требует доп. проверок

  4. Ограничение на тайминг скрипта не было, главно надёжность и простота (по моему мнению и постановке задачи)

Вот, вроде и всё.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

17 (изменено: Alectric, 2013-10-30 19:53:36)

Re: AHK: Автоматический перезапуск слетевшей программы

2. Окон много, но процесс все равно 1.
3. Выглядит проще:


#persistent
#SingleInstance,Force

nProc:="notepad.exe"
tWait:=1

loop
{
  sleep,% tWait*1000
  process, exist, %nProc%
  if errorlevel=0
    run, %nProc%
}

про надежность не знаю.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

18

Re: AHK: Автоматический перезапуск слетевшей программы

Тут ошибку выдаёт

Run %nProc%, , , NewPID ,       ;При прописовании WorkingDir не забываем о числе и правильности запятых.
Indomito пишет:

у любого процесса всегда есть окно

Вы уверены что у любого?

%nProc%, %tWait%

Не понятно как в функциях эти переменные принимают какое то значение.

Аргумент Exist немного не однозначный, он может вернуть PID самого скрипта, а это требует доп. проверок

Exist проверяет то что ему задано проверять, никакой неоднозначности нет.
---
Что то как то сложно всё, и зачем тут цикл проверки? Есть же Process WaitClose и Process Wait.
---
Лучше вообще сообщения получать http://forum.script-coding.com/viewtopi … 186#p76186, спасибо teadrinker.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: Автоматический перезапуск слетевшей программы

serzh82saratov пишет:

Тут ошибку выдаёт

Run %nProc%, , , NewPID ,       ;При прописывании WorkingDir не забываем о числе и правильности запятых.

да, выдает ошибку "The following variable name contains an illegal character: "NewPID, "

у меня в программе одно окно

20 (изменено: Indomito, 2013-10-31 15:45:49)

Re: AHK: Автоматический перезапуск слетевшей программы

да, выдает ошибку "The following variable name contains an illegal character: "NewPID, "

тут ошибка Punto Switcher "постарался", а я не заметил  - в конце занятая перед ;

Написал

Run %nProc%, , , NewPID ,       ;При прописывании WorkingDir не забываем о числе и правильности запятых.

Надо

Run %nProc%, , , NewPID        ;При прописывании WorkingDir не забываем о числе и правильности запятых.


serzh82saratov пишет:

Вы уверены что у любого?

на 101% это же Windows. Назовите мне программу без окна просто интересно, просто тип окон бывает разным.

Думаю проблема в том, чем смотреть имя окна, ну уж точно не на экране надо, а каким либо ПО или же Windows Spy, но он далеко не все правильно показывает, т.е. не все окна, а окно текущее, окно родительское - нет.

Скриншот из программы AnVir Task Manager  для FlashPlayerPlugin_11_9_900_117.exe которая на экране монитора по сути то вообще не показывается.

http://i57.fastpic.ru/big/2013/1031/b3/ed8193cb8a4f6e768f4b1e431fe3b2b3.png


Я первый раз пишу бесконечный скрипт для программы которая, постоянно отваливается  и  меняет название своего окна

Остальное дело вкуса и принципов написания - цикл будет бесконечен, а скрип резидентным.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

21

Re: AHK: Автоматический перезапуск слетевшей программы

Причём тут Windows Spy. ТС сказал про существование окна только в 9 посте. Кто сказал что процесс будет создавать Gui? Зачем в цикле постоянно проверять окно, если можно просто ждать запуск\завершение нужного процесса.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: Автоматический перезапуск слетевшей программы

Да, ты прав, я только что проснулся путаюсь

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

23

Re: AHK: Автоматический перезапуск слетевшей программы

Зачем в цикле постоянно проверять окно, если можно просто ждать запуск\завершение нужного процесса.

Затем, что окно может закрыться, а процесс нет. (Глюки программы)

24

Re: AHK: Автоматический перезапуск слетевшей программы

Malcev
Делаем выводы:

maxspace пишет:
ypppu пишет:

Слетает - значит её процесс перестаёт существовать или как?

да

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25 (изменено: Alectric, 2013-10-31 17:59:31)

Re: AHK: Автоматический перезапуск слетевшей программы

serzh82saratov пишет:

Malcev
Делаем выводы:

maxspace пишет:
ypppu пишет:

Слетает - значит её процесс перестаёт существовать или как?

да

Он имеет ввиду что процесс может и не выгрузится, но программа перестанет работать(заглючит).

В таком случае нужно отправлять программе сообщения и получать ответ, если ответа не пришло - перезапустить программу.
Я не знаю как это сделать.

Еще можно отслеживать - если программа изменяет какой-нибудь файл/данные/изменения в самом окне/т.д. , так-же если изменения остановились - перезапуск.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

26

Re: AHK: Автоматический перезапуск слетевшей программы

Есть конкретная постановка задачи - процесс закрыт = программа слетела. Вы можете придумать ещё 1000 своих вариантов.
Есть куча программ в которых постоянно открываешь и закрываешь окно, прога висит в трее.
Что при закрытии окна надо перезапускать?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

27

Re: AHK: Автоматический перезапуск слетевшей программы

Сорри. Невнимательно прочел тему.