Я запускаю устаревшее сетевое приложение на устаревшей серверной ОС (Win2k Web Server), работающую за пределами площадки. Приложение является коммерческим (т. Е. У меня нет исходного кода) продуктом, выпуск которого был прекращен разработчиком, но моя компания по-прежнему полагается на него, потому что на рынке нет лучшего продукта для этого чрезвычайно нишевого продукта. Проблема в том, что он дает сбой каждые несколько дней и всегда в худшее время (выходные, 3 часа ночи и т. Д.), И мне приходится входить на сервер через RDC, перезагружать сервер и вручную перезапускать приложение после того, как сервер снова заработает. Сервер ничего не делает, кроме как размещает это приложение. Я пробовал его на win2k3, но он все равно вылетает, поэтому смена ОС не поможет.
Я пытаюсь автоматизировать этот сервер, чтобы перезагрузить его, а затем перезапустить приложение, когда он обнаружит, что приложение умерло. У меня есть способ определить, когда это приложение умерло, и в это время я могу запустить любой скрипт / exe. Приложение не может работать как служба (я чертовски пытался заставить это работать, но шансов нет). Он должен работать на рабочем столе пользователя RDC, и нет никакого способа обойти это, потому что мне нужно часто взаимодействовать с ним на рабочем столе. Так:
1: Распознать, когда приложение не работает (готово) 2: Автоматически перезагрузить сервер, когда это будет сделано (просто, готово) 3: Когда сервер завершит перезагрузку, откройте это приложение на рабочем столе RDC пользователя с уровнем администратора.
Мой формальный вопрос: как мне сделать №3?
Любой совет будет очень приветствоваться и оценен.
Я собираюсь сказать то, что говорили другие, но немного иначе, поскольку я проделал то же самое с парой ужасных программ (обе являются программами опроса часов - что это с программами, которые часы опроса - отстой?):
Войдите на серверный компьютер как пользователь, который будет запускать приложение. Установите безопасную заставку пользователя (т. Е. Требуется пароль). Вам, вероятно, следует использовать «пустой экран» для экономии ресурсов процессора.
Разместите ярлыки для своего сценария, чтобы запустить приложение и проверить его «работоспособность» в группе «Все пользователи» «Запуск». (Убедитесь, что ваш сценарий дает приложению достаточно времени для фактического запуска, прежде чем проверять, "мертвый" ли он.)
Возьмите копию "nircmd" из http://www.nirsoft.net/utils/nircmd2.html и закинуть в каталог% SystemRoot% \ System32 (ну или куда-нибудь, правда). Добавьте ярлык в группу «Все пользователи» «Автозагрузка» для вызова:
Заставка% SystemRoot% \ system32 \ nircmd.exe
Добавьте следующие значения реестра, подставив соответствующие имя пользователя и пароль.
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon AutoAdminLogon - REG_SZ - 1 DefaultUsername - REG_SZ - Set to user name to logon with DefaultPassword - REG_SZ - Set to password to logon with DefaultDomain - REG_SZ - Set to either local machine's name if a local account is used to logon, or domain's name if a domain account is used to logon. ForceAutoLogon - REG_SZ - 1
На этом этапе компьютер загрузится и автоматически войдет в систему как пользователь, которого вы указали, запустит приложение и ваш «мертвый» скрипт и сразу перейдет в заблокированную заставку. Клавиша, удерживаемая во время загрузки, не остановит автоматический вход в систему (но, поскольку это находится за пределами сайта, мы надеемся, что клавиатура / мышь в любом случае защищены).
Если вы можете запустить его на W2K3, вы можете использовать аргумент «/ admin» или «/ console» в клиенте удаленного рабочего стола (в зависимости от того, какая у вас версия - введите «/?», Чтобы увидеть) для подключения к консоли. сеанс. Вам нужно будет войти в систему с тем же именем пользователя и паролем, что и для учетной записи автоматического входа, и никто без этого имени пользователя и пароля не сможет подключиться к сеансу консоли.
Если вам нужно продолжать запускать его на W2K, установите что-то вроде VNC, чтобы вы могли удаленно управлять сеансом консоли. Если вы все же используете VNC, обязательно измените разрешение в разделе реестра, в котором хранится конфигурация VNC компьютера (HKEY_LOCAL_MACHINE \ Software \ ORL \ Winvnc для более старых версий, другие места для более новых версий), чтобы удалить «Пользователи» и «Опытные пользователи. "из ACL ключа. Это предотвратит чтение пользователями с ограниченным доступом хэша пароля VNC, который можно легко превратить обратно в пароль VNC.
Вот как я это сделаю.
Ключевым моментом здесь является безопасность - короче говоря, вы не получите ее, если будете следовать этим инструкциям.
Шаги: 1. Автоматический вход. 2. Запустите командный файл (cmd), который запускает вашу программу при входе в систему.
Для автоматического входа - просто используйте TweakUI - это просто набор файлов реестра, но TweakUI - лучший способ написать их красиво.
Для пакетного файла просто напишите cmd-файл, который запускает вашу программу, и поместите его в папку «Запуск» в каталоге «Все пользователи».
Будут более изощренные способы сделать это, но этот низкотехнологичный механизм будет работать, но на 100% поставит под угрозу безопасность сервера!
Майк
Мы должны сделать это на нескольких сайтах, и мы используем автоматический вход, который предложил Майк.
Поскольку вы из Linux, возможно, стоит подчеркнуть, что автоматический вход в систему автоматически предоставляет имя пользователя и пароль для интерактивного сеанса при запуске сервера, то есть как если бы кто-то сидел на сервере, нажав ctrl-alt-delete и авторизовался на сервере. Затем приложение запускается из папки автозагрузки так же, как и для любого интерактивного пользователя.
NB RDC не участвует. Это интерактивный вход.
Очевидно, что теперь безопасности нет, потому что любой может подойти к серверу и начать печатать. Однако вы можете установить для заставки очень короткий тайм-аут, чтобы она быстро блокировала интерактивный сеанс. Единственная угроза безопасности заключается в том, что кто-то наблюдает за перезапуском сервера и может захватить его во время между автоматическим входом и включением экранной заставки.
JR
Как насчет размещения вашего приложения на виртуальном сервере; либо VMWare, либо Hyper-V и с использованием автоматического входа в систему, описанного Майком?
Я подумал об этом только после того, как опубликовал свой первый ответ, но если вы поместите свое приложение на виртуальный сервер, вы можете запустить его в интерактивном сеансе, и это не представляет опасности для безопасности, потому что у виртуальной машины нет клавиатуры и мыши.
JR
Популярной альтернативой RDP в этом сценарии является VNC, который позволяет подключаться к сеансу консоли независимо от того, вошел он в систему или нет.
Я считаю, что VNC может быть умеренно безопасным, в зависимости от того, какую версию вы используете, и это FLOSS.
Можешь попробовать TightVNC, UltraVNC, RealVNC, WinVNC...