Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2012, 12:55   #1
Val Rubis
 
Регистрация: 14.12.2008
Сообщений: 9
По умолчанию Перезапуск зависшего приложения

Приложение постоянно зависает. И его приходиться вручную перезапускать? Как можно это дело автоматизировать?
Val Rubis вне форума Ответить с цитированием
Старый 08.08.2012, 13:10   #2
Aleksandr_59
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 77
По умолчанию

Написать программку, которая будет регулярно отслеживать состояние нужного приложения и перезапускать его в случае зависания.
Aleksandr_59 вне форума Ответить с цитированием
Старый 08.08.2012, 13:11   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а ваше приложение то зависает?
может стоит его нормально сделать?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.08.2012, 13:34   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Согласен. Стоит искоренить причину а не ее многочисленные последствия.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.08.2012, 15:21   #5
Val Rubis
 
Регистрация: 14.12.2008
Сообщений: 9
По умолчанию

Приложение не мое. Разработчика.... считайте, что его нет.
Как отслеживать состояние программы?
Я так думаю нужно получить какие то данные с нее. И если данные не получены, то видимо приложение зависло. Какие данные?
Val Rubis вне форума Ответить с цитированием
Старый 08.08.2012, 15:40   #6
Aleksandr_59
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Val Rubis Посмотреть сообщение
Как отслеживать состояние программы?
Я так думаю нужно получить какие то данные с нее.
Так, на вскидку, не смогу сказать. Можно, например, сдвинуть форму. Зависшая программа этого не сделает - при зависании она перестаёт реагировать на сообщения. Пример корявый, но смысл в том, чтобы отследить обработку сообщений ОС, посланные этой программе.
Aleksandr_59 вне форума Ответить с цитированием
Старый 08.08.2012, 17:18   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

смотря что за приложение и чем выяляете зависание вы сами.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.08.2012, 17:44   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Для GUI есть функция IsHungAppWindow

используйте её.
Человек_Борща вне форума Ответить с цитированием
Старый 08.08.2012, 20:35   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Val Rubis
А действительно что делает приложение если не секрет?
Может проще настроить винду, мол если приложение не отвечает за определенное время пусть винда его гасит. И написать свою программу, которая каждую секунду будет мониторить приложение, и если оно не находится в процессах - запускать.
Думаю на этой основе возможен еще один вариант (я правда не ручаюсь за достоверность). Идея такая - через CreateProcess запустить то злополучное приложение и через WaitForSingleObject ждать его завершения. Когда винда поймет что приложение не отвечает - процесс будет снят, WaitForSingleObject расстопорит процесс, который то приложение запускал, а это значит нужно еще раз по кругу запустить через CreateProcess.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.08.2012, 21:44   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Stilet, зачем? Это же геморой, для окон в самой системе много интересных функций.
Программа GUI и если она "висит" то цикл оконных сообщение не работает, и стоит нам сделать IsHunAppWindow или SendMessageTimeout и мызнаем что программа в дауне..

Другое дело, когда программист далек от синхронизации потоков, долгих операций и VCL тогда другой вопрос6
Программа висит, или это долгая операция перевешивает VCL и стопорит цикл...

кладете таймер далее такой код:
Код:
var
  hWND:THandle;
  hProccess:DWORD;
  PID:DWORD;
begin
  PID:=0;
  hWND:=0;
  hProcess:=0;
  hWND:=FindWindow(nil,PChar('Название окна'));
  if hWND <> 0 then
  begin
   if IsHungAppWindow(hWND) then
   begin
    GetWindowThreadProcessId(hWND, @PID);
    if PID <> 0 then 
    begin
    hProcess:=OpenProcess(PROCESS_TERMINATE,False,PID);
    try
      if hProcess <> 0 then
      begin
      
     if not TerminateProcess(hProcess,0) then
     ShowMessage('Failed to terminate target hung process') else
     begin
       ShellExecute(...) //перезапускаем процесс...
     end;
     end;
    finally
       CloseHandle(hProcess);
    end;
    end;
   end;
  end;
end;

Последний раз редактировалось Человек_Борща; 08.08.2012 в 23:23.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перезапуск Кристинка89 Общие вопросы Delphi 9 10.03.2012 09:57
Перезапуск программы Михаил Юрьевич Общие вопросы Delphi 25 18.07.2011 10:29
Перезапуск приложения после падения Shouldercannon Общие вопросы Delphi 4 11.04.2010 17:42
Перезапуск DOS приложения по условию andrewua12 Фриланс 1 26.05.2009 00:02
Перезапуск DOS приложения по условию andrewua12 Операционные системы общие вопросы 2 25.05.2009 17:11