2012-02-18 2 views
6

Как запустить программу автоматически, если она сработает на сервере Windows 2003? Иногда моя программа просто падает, есть ли способ в Windows или настройках, которые я могу установить?Как перезагрузить программу автоматически, если она сбой в Windows?

+1

Какая программа? Служба Windows или обычное приложение? –

+0

Хм, «иногда моя программа просто падает». Похоже, что лучшим подходом было бы выяснить, почему программа вылетает и исправляет это. Band-помощники велики, потому что тело самовосстанавливается. Не так с вашими программами. –

+0

Конечно, вы хотите сделать вашу программу аварийной. Это отличный идеал, к которому нужно стремиться. Но даже самые надежные программы могут иногда вылетать из строя. Если вы находитесь в серверной среде, при возникновении сбоя может возникнуть большой смысл перезапустить. Вы все равно можете регистрировать сбои и пытаться их устранить, но ваши пользователи будут намного счастливее без длительного простоя для каждого сбоя. – aggieNick02

ответ

7

Обычный подход - запустить так называемый опекун . Это отдельный процесс, часто являющийся сервисом, который контролирует состояние основного процесса. Когда опекун обнаруживает, что главная служба умерла, она повторно запускает его.

Насколько я знаю, в Windows нет встроенных функций для этого.

+2

Встроенная функция для сервисов, вкладка «Восстановление». –

+2

Я скорее предположил, что использование слова «программа» подразумевает, что вопрос касается настольной программы. –

+0

Нах, служба - настоящий кровопролитный exe. Всего несколько соглашений, чтобы держать пользователя под контролем. –

1

К сожалению, в Windows нет настроек для автоматического перезапуска обычной программы при ее сбое.

Вам нужно активно взаимодействовать с графическим интерфейсом вашего приложения? Некоторые из Service Wrappers (предназначенные для запуска любого приложения в качестве службы Windows) будут отслеживать ваше приложение и перезапускать его при сбое, но не забудьте проверить Session 0 Isolation, чтобы убедиться, что он не будет мешать.

1

Вы можете использовать специальное приложение, например BDV SystemEvents или любое другое. Он позволяет указать приложение, которое будет запущено, если какое-либо другое приложение будет закрыто. Укажите то же приложение, что и Условие, и как действие, и вы получите ожидаемые результаты.

3

Примечание: работа с самозатягивающимися битами может быть полезна, но если вы не знаете, что делаете, они могут нанести ущерб всем видам хаоса. Это особенно важно, если вы запускаете их при запуске. Вы были предупреждены.

В любом случае. Я только что вспомнил что-то из моих 286 дней, когда я много играл с файлами BAT. Если записать файл

yourprogram.exe 
some other event 

файл BAT будет работать yourprogram, а затем сделать паузу и ждать в фоновом режиме до выхода из программы. После этого он запустит «какое-то другое событие». Раньше это было досадно, если вы хотели запускать сразу несколько вещей, но здесь это действительно полезно. Используя это, можно заставить его запустить цикл, который перезапускает программу (и повторно запускает файл bat), как только она выйдет. Объедините это с https://superuser.com/questions/62525/run-a-completly-hidden-batch-file, и вы даже не увидите, как это происходит.

Окончательный BAT-файл ("restart.bat" в этом примере) будет выглядеть примерно так:

c:\[location]\yourprogram.exe 
wscript "C:\[location]\invisible.vbs" "C:\[location]\restart.bat" 

Вот об этом. Запустите программу (при запуске через задачу или даже только папку автозагрузки) с линией 2, и это должно решить вашу проблему :)

О, если вы хотите остановить цикл, просто переименуйте файл bat или поставьте «//"перед двумя строками, сохраните его и выйдите из программы.

Если для запуска программы требуются права администратора, решение, которое я нашел, это использовать psexec (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx) для запуска как программы, так и летучей мыши с повышенными привилегиями. В этом случае BAT будет выглядеть следующим образом:

c:\[location]\psexec -h c:\[location]\yourprogram.exe 
c:\[location]\psexec -h wscript "C:\[location]\invisible.vbs" "C:\[location]\restart.bat" 

Затем запустите биту в качестве администратора, или запустить вторую линию (без Psexec части) из планировщика задач с повышенными привилегиями.ОСТОРОЖНО: запустив его как обычного пользователя и нажав «нет» в приглашении UAC, я получил BSOD, возможно, потому, что он зацикливал «не может запускать программу из-за отсутствия привилегий» в пару миллиардов раз или что-то в этом роде :)

+1

Nice концепции. Вы даже можете избежать командного файла и invisible.vbs, и сделать это в одном VBScript, вместо этого, например: «Откроем калькулятор открытым Установите objShell = WScript.CreateObject (« WScript.Shell ») ObjShell.run« calc.exe », 1, true ObjShell.run (Wscript.ScriptFullName) – Jimadine

1

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

После некоторых поисковых запросов я натолкнулся на этот приятный list. Блоггер собрал около 8 инструментов для автоматического перезапуска разбитого или закрытого приложения.

1

Вы можете использовать RegisterApplicationRestart.

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

Для автоматического перезапуска без вмешательства пользователя также имеется RestartOnCrash. Работает со всеми версиями Windows.

Смежные вопросы