У меня vps под управлением Windows Server 2008 R2.
У меня есть исполняемый файл, который всегда нужно запускать. Даже если я не авторизован.
Скажем, возникла проблема и сервер неожиданно перезапустился, мне не нужно входить в систему, чтобы он запустился. Как это сделать?
Кроме того, я не думаю, что это можно сделать, но, скажем, происходит сбой приложения, есть ли способ заставить ОС закрыть сбойный исполняемый файл и перезапустить его?
Кроме того, когда я вхожу в систему как администратор, это тоже было бы здорово, если бы я мог видеть, как он работает. (wg: видимое окно консоли)
Спасибо
Поскольку это ваш game, то есть код принадлежит вам, то это означает, что вам нужно переписать его как службу Windows. Серверы созданы для запуска служб. Службы Windows предназначены для работы без вмешательства пользователя, независимо от того, вошел ли кто-либо в систему или нет, и могут запускаться автоматически при загрузке машины. (Просто установите для вашей службы автоматический режим, и она запустится сразу после загрузки ОС.) Кроме того, вы можете определить расширенные параметры восстановления в контроллере службы, чтобы Windows автоматически перезапускала службу для вас в случае сбоя или даже отправляла вам электронное письмо. уведомление о том, что ваша служба потерпела крах, если вы были так склонны.
Вы не взаимодействуете напрямую со службой Windows. Службы Windows не имеют пользовательского интерфейса и не создают окна на рабочем столе. (Oни не должен.) Вы не увидите окно консоли для этого при входе в систему. Однако вы можете написать отдельный приложение, которое может взаимодействовать с вашей службой, чтобы позволить пользователю настраивать параметры или выполнять административные функции в вашей службе. Ваше административное приложение может использоваться для установки и чтения записей реестра или параметров файла конфигурации, используемых вашей службой, и т. Д.
По сути, все, что вы делаете помимо того, что я только что описал выше, является делаю это неправильно (TM), ПО МОЕМУ МНЕНИЮ.
Но для полноты картины давайте рассмотрим некоторые способы, которыми вы можете сделать это неправильно, но при этом технически выполнить то, что хотите.
Допустим, возникла проблема и сервер неожиданно перезапустился, мне не нужно входить в систему, чтобы он запустился. Как это сделать?
Конечно. Запустите исполняемый файл при запуске, поместив его в (Извините, что это для входа пользователя.) Или поместите его в запланированную задачу, которая настроена для запуска при запуске системы. (Конечно, если вы идете по маршруту службы Windows, это просто вопрос настройки вашей службы на автоматический в диспетчере служб.)HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
.
скажем, приложение вылетает, есть ли способ заставить ОС закрыть сбойный исполняемый файл и перезапустить его?
Это не имеет смысла. Если процесс все еще запущен, значит, сбой не произошел. Если это повесили из-за чего-то, что вы сделали неправильно в своем коде, например, из-за отсутствия обработки исключений, это просто то, что вам нужно исправить в своем коде.
С другой стороны, если вы хотите запускать сценарий каждые 5 минут (через планировщик задач), который проверяет, FunGame.exe
работает или нет, и запустите его, если он не работает, тогда вы можете сделать это ... хотя я бы возненавидел вас, если бы вы запустили что-то подобное на одном из моих серверов.
Кроме того, когда я вхожу в систему как администратор, это тоже было бы здорово, если бы я мог видеть, как он работает. (wg: видимое окно консоли)
Не произойдет - если только вы прислушаетесь к моему совету о создании отдельного приложения, которое было специально разработано как интерфейс администратора / мониторинга для вашей службы, тогда вы можете вставить это приложение в папку автозагрузки администратора и т. д.
О, и последнее ... есть еще srvany.exe
... он старый и не поддерживается, но вы можете рассмотреть его как общий хост службы, если вы не собираетесь создавать свою собственную службу.
Я предполагаю, что ваше приложение является приложением командной строки, поскольку вы упомянули окно консоли.
Если это так, вы можете запустить его из командного файла, например:
:top
the_game_server.exe
goto top
Думаю, даже если это не приложение командной строки, которое теоретически тоже будет работать.
Заставить приложение пережить сбой может быть сложнее. Это зависит от того, что происходит при сбое ... например, в окнах может появиться модальное диалоговое окно, сообщающее вам, что приложение необычным образом сообщило среде выполнения о прерывании или еще что-то. Если вам нужно каким-то образом нажать кнопку диалога, AutoHotkey, вероятно, будет хорошим выбором.
Это не такое элегантное решение, как создание службы. Это больше похоже на то, что я бы сделал, если бы источник приложения был недоступен, и мне просто нужно было заставить его работать.