Task Scheduler: Faça login em uma sessão na inicialização e inicie um aplicativo de desktop?

5

PROBLEMA:

Eu tenho uma VM do Windows 2008 R2 que executa um sistema ERP de terceiros. Eles têm um utilitário que executará tarefas agendadas para fazer backup do banco de dados Oracle e de seus dados de aplicativos todas as noites com uma rotação de 7 dias.

O problema é que ele deve ser executado como um aplicativo de desktop de forma interativa em uma sessão. Não pode ser executado como um serviço. Embora não esteja entusiasmado em deixar uma conta conectada, aprendi a permitir isso. O principal problema aqui é que, se o servidor for reinicializado, pode levar dias até eu perceber que a conta não está mais conectada ao servidor com o aplicativo aberto.

PERGUNTA:

Pode (e se sim, como) criar uma tarefa que é executada na inicialização que registra um usuário na VM (criando uma sessão) e inicia um aplicativo na área de trabalho dessa sessão?

OR

Se isso for muito difícil ou impossível, alguém tem ideias sobre como verificar se esse aplicativo está sendo executado na sessão da conta e, se não, enviar um alerta? Eu sou legal mesmo com um erro de log de eventos personalizado, já que posso fazer isso por meio de monitoramento remoto.

    
por TheCleaner 02.05.2013 / 15:24

3 respostas

8

Estou assumindo que o programa precisa exibir sua interface do usuário e que você não pode simplesmente executá-la de forma não interativa. (Eu amo essas "joias" de software ...)

Veja o que eu faria pessoalmente:

  • Configure o computador servidor com um AutoAdminLogon como o usuário para o qual você deseja executar o aplicativo. Isso fará com que o console do servidor faça logon como este usuário automaticamente na inicialização.

  • Adicione um script ao grupo "Inicialização" pessoal do usuário que inicia a tarefa de forma assíncrona, monitora a lista de processos para a tarefa que está sendo apresentada (eu usaria WMIC PROCESS LIST , pessoalmente), alerta se a tarefa for ausente da lista de processos e, se desejado, reinicie o processo. Eu também bloquearia a estação de trabalho também.

O script no grupo de inicialização pode ser tão simples quanto (chamando o programa que você executou 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

Esse script pressupõe que haverá apenas uma instância da tarefa em execução e será apenas verificar a presença da tarefa na lista de processos. Se o processo travar e morrer de outra forma, este script não pegará isso. (Monitorar se o programa está "respondendo" ao Windows - ou seja, se a bomba de mensagens ainda estiver ---- bombando-- é uma perspectiva mais envolvida.)

    
por 02.05.2013 / 15:47
3

Primeiro, você tem certeza de que realmente precisa de uma sessão interativa? É provável que você possa executá-lo dentro de uma tarefa agendada se configurá-la.

Agora, supondo que o acima não seja possível / prático / permitido:

Você pode configurar sua VM para fazer login automaticamente em um usuário. O processo é descrito aqui , mas aqui estão os pontos altos:

  • Abra HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon no regedit
  • Crie duas entradas de registro DefaultUserName and Defaultpassword '
  • Edite a entrada AutoAdminLogon e defina-a como 1

(alternativamente, você pode simplesmente baixar e usar AutoLogon )

Tenho certeza de que você pode ver o problema em potencial aqui, então não vou elaborar.

Seu segundo pedido é bem fácil de fazer com um lote. Aqui está um exemplo que usa blat :

tasklist | find "myprocess.exe"
if %ERRORLEVEL%==1  blat tasknotrunning.txt -to [email protected]

Se você quiser usar o log de eventos, use o eventcreate incorporado um comando> como este:

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

(Eu escolhi 911 aqui como ID do evento, mas você pode usar o que achar melhor desde que não entre em conflito com outra coisa).

    
por 02.05.2013 / 15:45
0

They have a utility that will run scheduled jobs to backup the Oracle database and their app data

Se essa é a tarefa, há outras maneiras de fazer backup de um banco de dados Oracle. Você mencionou outros dados de aplicativos também, mas espero que também possam ser capturados separadamente. Você já investigou se ferramentas de backup mais gerais, como o BackUp Exec, Barracuda, Acronis, etc, que você já pode estar usando para outros serviços, poderiam atingir o mesmo objetivo? Parece que essa ferramenta é destinada a clientes menores que, de outra forma, não teriam uma solução de backup real.

    
por 02.05.2013 / 16:00