Назад | Перейти на главную страницу

Планировщик задач: войти в сеанс при запуске и запустить настольное приложение?

ВЫПУСК:

У меня есть виртуальная машина Windows 2008 R2, на которой работает сторонняя система ERP. У них есть утилита, которая будет запускать запланированные задания для резервного копирования базы данных Oracle и данных приложений каждую ночь с 7-дневной ротацией.

Проблема в том, что оно должно запускаться как настольное приложение в интерактивном режиме в рамках сеанса. Он не может работать как служба. Хотя я не в восторге от того, что оставляю учетную запись без входа в систему, я научился это разрешать. Основная проблема здесь заключается в том, что если сервер перезагружается, могут пройти дни, прежде чем я пойму, что учетная запись больше не входит на сервер с открытым приложением.

ВОПРОС:

Могу ли (и если да, то как) создать задачу, которая запускается при запуске, которая регистрирует пользователя на виртуальной машине (создает сеанс) и запускает приложение на рабочем столе этого сеанса?

ИЛИ

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

Я предполагаю, что программа должна отображать свой пользовательский интерфейс и что вы не можете просто запустить ее в неинтерактивном режиме. (Я люблю эти "жемчужины" программного обеспечения ...)

Вот что я бы сделал лично:

  • Настройте серверный компьютер с AutoAdminLogon как пользователь, от имени которого вы хотите запускать приложение. Это заставит консоль сервера автоматически войти в систему как этот пользователь при загрузке.

  • Добавьте сценарий в личную группу «Запуск» пользователя автолога, который запускает задачу асинхронно, отслеживает список процессов для присутствующей задачи (я бы использовал WMIC PROCESS LIST, лично), предупредить, если задача пропала из списка процессов, и, при желании, перезапустить процесс. Я бы тоже заблокировал рабочую станцию.

Сценарий в группе запуска может быть таким простым, как (вызов программы, которую нужно запустить eqalert.exe):

@echo off
:restart
start "" "C:\Program Files\EQFU\EQWin32\eqalert.exe"
:check_loop
rem Delay 30 seconds between checks
ping -n 30 127.0.0.1 >NUL 2>NUL
wmic process list | find /i "eqalert.exe" >NUL 2>NUL
if not errorlevel 1 goto check_loop
echo eqalert.exe not running - restarting
eventcreate /T ERROR /ID 1 /L APPLICATION /D "eqalert.exe not running - restarting"
goto restart

Этот сценарий предполагает, что будет только один экземпляр задачи, и только проверяет наличие задачи в списке процессов. Если процесс зависает или умирает, этот скрипт этого не поймает. (Мониторинг того, "реагирует ли" программа на Windows, т.е. если ее насос сообщений все еще ... эээ ... качает, - более сложная перспектива.)

Во-первых, вы уверены, что вам действительно нужен интерактивный сеанс? Скорее всего, вы действительно сможете запустить его внутри запланированной задачи, если настроите его свойство.

Теперь, предполагая, что это невозможно / практично / разрешено:

Вы можете настроить свою виртуальную машину на автоматический вход пользователя. Процесс описан Вот но вот основные моменты:

  • открыто HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon в regedit
  • Создайте две записи реестра DefaultUserNameandDefaultpassword`
  • Отредактируйте AutoAdminLogonзапись и установите для нее 1

(в качестве альтернативы вы можете просто скачать и использовать AutoLogon)

Я уверен, что вы видите здесь потенциальную проблему, поэтому я не буду вдаваться в подробности.

Ваш второй запрос довольно легко выполнить с помощью пакета. Вот образец, который использует блат:

tasklist | find "myprocess.exe"
if %ERRORLEVEL%==1  blat tasknotrunning.txt -to admin@domain.com

Если вместо этого вы хотите использовать журнал событий, вы можете использовать встроенный событие команда вроде этой:

tasklist | find "myprocess.exe"
if %ERRORLEVEL%==1  eventcreate.exe /L APPLICATION /ID 911 /D “task XXX is not running” /T INFORMATION

(Я выбрал 911 в качестве идентификатора события, но вы можете использовать все, что считаете нужным, если это не конфликтует с чем-то другим).

У них есть утилита, которая будет запускать запланированные задания для резервного копирования базы данных Oracle и данных приложений.

Если это все, что делает задача, есть другие способы резервного копирования базы данных Oracle. Вы также упомянули другие данные приложения, но я ожидаю, что их также можно будет записать отдельно. Вы изучали, могут ли более общие инструменты резервного копирования, такие как BackUp Exec, Barracuda, Acronis и т. Д., Которые вы, возможно, уже используете для других служб, достичь той же цели? Похоже, этот инструмент предназначен для небольших клиентов, у которых иначе не было бы настоящего решения для резервного копирования.