Descrição:
Como executar uma aplicação quando o domínio inicia, mesmo que não haja um E3Viewer aberto (ver nota ao final deste artigo)?
Solução:
Para isso, basta colocar o script abaixo no evento OnStartRunning de um Tag Interno:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "c:\AppE3\aplicativo.exe"
Deste modo, ele será executado toda vez que o domínio for iniciado.
Porém, para terminar este processo quando o domínio para, é necessário saber o PID (ProcessID) que foi criado para ele após ter executado o WshShell.Run. Depois de obter essa informação, deve-se editar o script acima para o seguinte:
WshShell.Run "c:\AppE3\aplicativo.exe"
ProcessName = "aplicativo.exe"
Set service = GetObject("winmgmts:\\.\root\cimv2")
Set results = service.ExecQuery(" Select * from Win32_Process where Name = '"& ProcessName &"'")
if results.count <> 0 then
for each obj in results
TagInternoProcessID = obj.ProcessId
exit sub
next
end if
Então, para encerrar o PID, deve-se criar o seguinte script no evento OnStopRunning do Tag Interno:
Set service = GetObject("winmgmts:\\.\root\cimv2")
Set results = service.ExecQuery(" Select * from Win32_Process where ProcessId ='" & TagInternoProcessID & "'")
for each obj in results
obj.Terminate()
exit sub
next
Observação: verifique seu script, configurando as variáveis necessárias e links para o Tag Interno.
NOTA: Há uma certa restrição no uso do tradicional objeto Shell do Win XP, pois a partir do Windows Vista ou versões superiores os serviços que rodam na conta SYSTEM (como o E3Run) não podem mais mostrar janelas; em outras palavras, eles não podem mais “interagir com o desktop”. A alternativa neste caso é inserir os scripts que rodam programas com janelas apenas em eventos do Viewer, usando o método ExecuteExternalApp, ou o pick de executar aplicação. Vale lembrar que para isto a pasta onde está o arquivo deve ser compartilhada na rede, para poder ser acessada das diferentes máquinas/viewers clientes.