Executar script .bat em segundo plano [Resolvido]

Executar script .bat em segundo plano [Resolvido]
Dias atrás precisei que algumas máquinas Windows da minha rede rodassem um script .bat em background (sem que o usuário perceba). Se isto é o que você precisa, siga em frente!

Download
Para fazer o download acesse o site do Desenvolvedor ou clique no link abaixo:

http://taylorlopes.com/wp-content/plugins/downloads-manager/img/icons/setup.gif Download: Bat_To_Exe_Converter.zip (416.71KB)
Data: 03/05/2010
Cliques: 5445
Descrição: Autor: http://www.f2ko.de/ | Free

matrix

Introdução
Batch ou arquivo de lote (também conhecidos por .bat) é um arquivo de computador utilizado para automatizar tarefas (Saiba mais…). Eu não pretendo discutir se usar .bat, VB, shell, java, Windows ou Linux é o melhor caminho. Não defendo tecnologias, mas as uso em meu favor, buscando o que elas tem de melhor a oferecer e isto pode variar de acordo com as necessidades ou ambiente que estou inserido.

Problema
Em fim, eu precisava de um .bat para mapear uma unidade de rede apontando para um diretório no servidor e também para rodar um script em .vbs que obtinha algumas informações de hardware das maquinas clientes. Mas tinha que ser transparente (background) para os usuários, pois se não, certamente eles fechariam a telinha do MS-DOS antes de completar o script.

Solução
Tentei alguns artifícios presentes na Internet, mas sem sucesso. O que realmente salvou a pátria foi o Bat To Exe Converter. O aplicativo permite converter .bat em .exe e ainda dá a opção “Ghost application” que é justamente quem possibilita fazer o executável rodar em segundo plano (background). Nem é necessário instalação!

Baixe, descompacte e execute o arquivo Bat_To_Exe_Converter.exe (Acima) e faça da seguinte forma:

(1) Clique no botão “…” ao lado do campo Batchfile e indique seu script .bat que será convertido
(2) Marque a opção “Ghost application”
(3) Clique no botão “Compile”

bat1

Note que será criado no mesmo diretório do seu .bat um outro arquivo de mesmo nome, porém, com extensão .exe. Tente executá-lo e verá que roda de forma transparente, sem qualquer janela visível.

Este Post poderia terminar por aqui que já teria cumprido seu objetivo. Mas vou estendê-lo mais um pouco detalhando os arquivos de script que utilizei, até mesmo para uma questão de futuras consultas.

Em resumo funciona assim: Num diretório do servidor coloquei alguns arquivos que em dado momento serão (uma única vez) copiados para a máquina cliente. São eles:
(1) rede.exe
(2) rede.reg
(3) scan.vbs

rede.exe nada mais é do que um arquivo rede.bat que compilei usando o Bat_To_Exe_Converter.exe mencionado neste Post. O servidor onde está este e outros arquivos funciona apenas de repositório, pois o objetivo é, posteriormente, copiar o “rede.exe” para a máquina cliente e criar uma chave no registro para que ele seja sempre executado ao iniciar o Windows. Como dito, este arquivo roda invisível ao usuário e tem a finalidade de mapear uma unidade de rede (t:) apontando para o diretório ” \\server\trabalho” (Área do usuário). Além disso, roda um script VB (scan.vbs) que obtem algumas informações do hardware.

rede.bat | Mapeia unidade de rede e executa .vbs
1
2
3
  net use t: /delete
  net use t: \\server\trabalho
  wscript \\server\aplicativos\scan.vbs

rede.reg, ao ser executado com dois cliques, cria uma chave (Valor da sequência) no registro do windows que faz com que “rede.exe” seja executado toda vez que o Windows inicializa. Esta chave pode ser vista após criada acessando o Menu “Iniciar” > “Executar”, digitando “regedit” e seguindo o caminho: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

rede.reg | Cria chave no registro do Windows
1
2
3
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"rede"="C:\\rede.exe"

scan.vbs é um script VB que captura algumas informações da hardware da máquina cliente. Utilizei este recurso pois precisava fazer um inventário das máquinas da rede a fim de obter alguns dados específicos (Não quis utilizar os softwares de inventários que existem na Internet). Não vou postar aqui o conteúdo do script “scan.vbs” pois é baseado no PCeX, que adaptei para meu uso a fim de gerar um sumário de hardware em XML. Maiores detalhes sobre PCeX, acesse:

Aproveito para deixar meu muito obrigado aos desenvolvedores do PCeX que gratuitamente disponibilizaram o código fonte.

Finalizando, criei um script para copiar os arquivos do servidor para a máquina cliente de um só vez. Então, tudo que eu tinha que fazer era ir na máquina cliente, acessar o compartilhamento no servidor e executar esse mini-instalador. A partir de então, toda vez que a máquina do cliente inicializava, o rede.exe (antigo .bat) rodava em background e cumpria a missão.

rede.install.bat| Instala solução nas máqunas clientes
1
2
3
4
5
6
7
8
9
@echo off
cls
@echo INICIANDO...
FOR /l %%a IN (%1,-1,1) do (ECHO 1 >NULL %%as&ping -n 2 -w 1 127.0.0.1>NUL)
@echo.
copy \\server\trabalho\aplicativos\rede.exe c:\rede.exe
\\server\trabalho\aplicativos\rede.reg
@echo FIM
FOR /l %%a IN (%1,-1,1) do (ECHO 1 >NULL %%as&ping -n 2 -w 1 127.0.0.1>NUL)

Só mais uma observação: Essa linha começando com “FOR” funciona apenas como uma pausa. Na verdade, foi a forma que encontrei de simular a função sleep (dormir) presente em várias linguagens de programação.

Até a próxima!

 

10 Comentários

  1. Ariel 26 de setembro de 2010 at 12:29 #

    É possível executar um arquivo cm-dos.exe dentro de um servidor através de script? obs: o servidor permite isso.

    • Taylor Lopes 26 de setembro de 2010 at 15:37 #

      Não entendi! Você quer executar um cmd.exe (command) através de um script? Executar simplesmente abrindo o ms-dos (cmd.exe) ou executando algum comando nele? Qual seu servidor? Falouuu…

  2. Junior Ferraz 20 de novembro de 2010 at 0:18 #

    Exelente programa muito bom mesmo agora faço os comandos em .bat e converto para .exe!

  3. Wesley 27 de julho de 2011 at 16:23 #

    Boa dica!

    Estou usando em meus arquivos cmd, conhece algum para java?

  4. Rhadzony 30 de outubro de 2011 at 12:25 #

    Tem como configurar um icone para o arquivo final .exe ?

  5. Daniess 4 de janeiro de 2012 at 17:41 #

    è possibile che questo “compilatore” non aggiunga niente ai nostri batch?
    Scusate ma presto attenzione alla sicurezza

  6. Junior 28 de maio de 2013 at 13:20 #

    Muito boa dica, parabéns!
    Me ajudou bastante.
    Att

  7. Marcos 10 de novembro de 2013 at 10:05 #

    http://social.technet.microsoft.com/Forums/pt-BR/e6463015-b4e2-465b-9e83-4a1d797437db/executar-bat-em-segundo-plano?forum=scriptadminpt

    Melhor opção para executar um .bat em background. #euachei

    • Taylor Lopes 10 de novembro de 2013 at 14:50 #

      Opa, não testei, mas parece interessante… “melhor” é relativo, mas valeu!

Deixe uma resposta

Conecte com Facebook