Criando um serviço para executar o RoboCopy

2

Estou tentando montar um arquivo em lote que irá configurar uma tarefa robótica como um serviço em resposta à entrada do usuário. A ideia básica é que o usuário insira MyRobocopyBatchFile.bat sourceFolder destinationMachine e, a partir de então, o conteúdo da pasta espelhado com uma pasta conhecida no destinationMachine. O serviço será configurado para iniciar automaticamente para que seja executado na inicialização. Para isso, tirei as filas da esta pergunta

O ambiente de destino para isso é o WindowsServer 2008 R2

Minha intenção de como fazer isso é

set destination=\%2\RunSheets
set source=%~dp0%1
echo Setting source to %source%
echo Setting destination to %destination%
set serviceName=RunSheetCopy%2

sc create %serviceName% binPath= "c:\Windows\System32\robocopy.exe %source% %destination% /MIR /MON:1 /v /log:C:\Logs\RoboCopy\%serviceName%.log /LEV:1" start= auto DisplayName= %serviceName% 

sc start %serviceName%

com a entrada do usuário, algo como:

MyRobocopyBatchFile.bat .\RunSheets 10.20.30.40

O problema que estou enfrentando é que, quando o arquivo em lote começa a iniciar o serviço, ele me envia uma mensagem de erro. A mesma mensagem de erro ocorre ao iniciar com o NetStart ou através da janela de serviços. A mensagem de erro é:

 [SC] StartService FAILED 1053:

 The service did not respond to the start or control request in a
 timely fashion.

Apesar da mensagem de erro, o robocopy está sincronizando os diretórios, mas não continua no modo monitor.

Se alguma ajuda sobre como executar o robocopy como um serviço seria muito apreciada.

N.B. O gerente de produto está muito interessado na ideia de um serviço.

ATUALIZAÇÃO: Como não havia maneira de fazer isso em um mecanismo que deixaria o PM feliz (SrvAny, ser legado não era uma opção), acabei indo com o hacking de um wrapper de serviço para o RoboCopy, não é a solução que eu teria gostado mas vai fazer o trabalho.

    
por Klee 07.04.2014 / 07:25

2 respostas

4

Eu consegui configurar algo assim há alguns anos ... mas não consigo lembrar como! Então, eu liguei minha VM antiga para verificar.

Eu usei o utilitário srvany.exe que vem com o Windows 2003 kit de recursos .

Este utilitário não é realmente suportado na versão recente do Windows, mas funciona no Windows 2008 R2 .

Do link anterior, observe este ponto importante:

Note however that SC is NOT a replacement for SRVANY! SC will help you create/install a service, but it will not allow you to run a regular, non-service executable as a Windows Service like srvany.exe will.

É por isso que você recebe sua mensagem de erro. O comando Robocopy é executado quando o serviço é iniciado, mas depois falha porque não foi projetado para ser executado como um Serviço do Windows.

  1. Faça o download e instale rktools.exe em sua estação de trabalho e, em seguida, copie apenas o arquivo necessário srvany.exe em algum lugar no seu servidor (digamos c:\Tools ).

  2. Em seguida, crie o serviço do Windows para srvany :

    sc create Robocopy-Service binPath= "C:\Tools\srvany.exe" start= auto
    
  3. Abra o registro e vá para: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Robocopy-Service

  4. Crie uma nova chave chamada Parameters

  5. Sob essa nova chave, crie 3 novos valores de string:

    • AppDirectory: c: \ windows \ system32
    • Aplicativo: c: \ windows \ system32 \ robocopy.exe
    • AppParameters: c: \ origem c: \ dest / MIR / MON: 1

Por fim, inicie o serviço chamado Robocopy-Service e tudo deve funcionar bem.

Agora, a partir daqui, você ainda pode automatizar as coisas em um arquivo em lote, mas precisará usar reg.exe (ou regedit.exe) para manipular as configurações do Registro.

Eu também encontrei, nos meus favoritos, o link original que me ajudou: link

    
por 07.04.2014 / 18:47
0

Post antigo, novas respostas Por US $ 49,95, isso deve ser feito. Trabalhando para executar o negócio Onedrive como um serviço. link

Aqui está outro candidato (gratuito) para rolar-se: link

SVC.EXE Sinopse. SVC.EXE é um simples programa de linha de comando do Windows NT para gerenciar serviços NT. Os serviços podem ser listados e serviços individuais podem ser exibidos, instalados, modificados ou removidos. Inclui recursos para definir dependências de serviço. O programa solicita todas as informações necessárias do stdin. Para a maioria dos prompts, digitando? exibirá uma mensagem de ajuda.

AVISO - VOCÊ É ACONSELHADO A RESPEITAR SEU REGISTRO ANTES DE EXECUTAR ESTE PROGRAMA. (Embora eu nunca tenha encontrado problemas ao usá-lo.)

Por favor note que o SVC.EXE não está relacionado com o programa de spyware do Madfinder com o mesmo nome. Clique aqui para mais informações.

SRVSTART.EXE

Sinopse. SRVSTART.EXE é um executável do Win32 e DLL que permite executar comandos como se fossem serviços do Windows NT. Ele também possui alguns recursos para melhorar a execução de comandos comuns do console (solicitação de parâmetros, etc.). A DLL pode ser usada sozinha para criar um serviço sem precisar escrever nenhum código de gerenciamento de serviço.

SRVSTART.EXE opera em um dos dois modos.

It can be used to run an ordinary command (executable program batch file). In this command mode, SRVSTART.EXE can prompt the user for the values of command-line parameters such as passwords.
It can be used to run an executable program in the context of a Windows NT service (service mode). SRVSTART.EXE will itself handle all of the interactions with the NT Service Control Manager (SCM). It is not necessary for the program to include any service management code. 

Prêmios SrvStart

O SRVSTART.EXE recebeu originalmente a classificação Top Five-Star Editor's Choice por downloads do ZDNet. Infelizmente, como a Ziff-Davis decidiu cobrar dos desenvolvedores de software - até mesmo desenvolvedores freeware como eu - uma taxa a ser listada, meu software não tem mais recursos em seus sites.

    
por 12.05.2016 / 20:45