Windows: Criando um serviço a partir do aplicativo headless (VirtualBox). Parar / desligar o script?

3

Meu cliente precisa ter um Linux virtualizado em execução no Windows Server 2008 (R1). Eu consegui configurar o VirtualBox como um serviço com srvany , mas não vejo como criar um tipo de 'script de parada' para que a máquina virtual seja desligada corretamente quando eu parar o serviço registrado.

Eu sei que pode haver outras opções para criar uma VM sem cabeçalho, mas esse não é o ponto. Como posso criar um 'script de parada' que é executado quando eu paro o serviço registrado (ou o sistema é reinicializado)?

Ou talvez existam outras maneiras de iniciar os scripts de 'desligamento do sistema' para que a VM seja parada corretamente no desligamento?

(para aqueles que possam estar interessados)

Como eu criei um serviço VirtualBox

  1. Configurar uma máquina virtual
  2. Instale o "Windows Server 2003 Resource Kit Tools.exe".
  3. Copie a pasta ".VirtualBox" para "C: \ Windows \ System32 \ config \ systemprofile \" para que o usuário "system" (que executa serviços) tenha suas máquinas VirtualBox lá.
    WARN: Você precisará corrigir os caminhos do VirtualBox.xml para os snapshots, se sua VM tiver algum.
  4. Crie um serviço vazio chamado "UbuntuD" com a ajuda de srvany :
    sc create UbuntuD binPath= "C:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe" start= auto DisplayName= "Ubuntu Daemon"
  5. Especifique o comando de início do serviço. Adicione estas chaves ao registro |
    [HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Services\UbuntuD\Parameters]
    Application="C:\Program Files\Sun\VirtualBox\VBoxHeadless.exe"
    AppParameters="--vrdp=off -s Ubuntu"
    AppDirectory="C:\Program Files\Sun\VirtualBox\"
  6. Não há "script de parada" para nosso serviço de hacky, então adicionamos um script de desligamento em "Política local" - > Configuração do computador - > Configurações do Windows - > Scripts (inicialização / desligamento): C:\Program Files\Sun\VirtualBox\vboxmanage , params: controlvm Ubuntu savestate
  7. Executar o serviço
por kolypto 25.11.2009 / 20:23

2 respostas

4

Programas de serviço "reais" têm código para lidar com as atividades de limpeza e desligamento. Você está executando um programa que não foi planejado para ser executado como um serviço e não possui esse código para lidar com a finalização normal quando o Service Control Manager (SCM) sinaliza que o serviço está sendo interrompido.

Alguém poderia escrever um bom wrapper de serviço para o VirtualBox que poderia lidar com a execução como um serviço. Essa é a solução real. Infelizmente, você não vai encontrar um "hack" que faça o que você está procurando. SRVANY (e todos os outros programas do mesmo tipo que eu saiba) não tem nenhuma capacidade de executar código especificado pelo usuário quando o SCM sinaliza que o serviço está parando.

    
por 25.11.2009 / 20:39
0

link

Crie um arquivo VBS (ou seja, um script VB). Abra o bloco de notas e digite o seguinte código:

'=====================================
Set WshShell = WScript.CreateObject("WScript.Shell")
obj = WshShell.Run("H:\test.bat", 0)
set WshShell = Nothing
'=====================================

Substitua o "H: \ test.bat" no código acima pelo caminho completo do seu próprio arquivo BAT, mas não esqueça as aspas duplas ao redor do caminho completo do arquivo BAT.

SALVE o arquivo. Dê um nome como HIDECMDWINDOW.VBS. A extensão tem que ser VBS.

Clique duas vezes no arquivo VBS para executá-lo. Seu arquivo BAT deve ser executado sem mostrar a janela de comando.

Se o seu arquivo BAT leva argumentos, você pode passar argumentos para ele também - o script para isso será um pouco mais avançado, mas se você precisar dele, deixe-me uma mensagem.

Os créditos acima citados vão para Koushik Biswas como pôster original.

Postado aqui porque esse foi o link que mais surgiu para mim na minha pesquisa e o que eu vinculei provavelmente é o que a maioria das pessoas que encontra isso está procurando.

    
por 15.05.2011 / 12:28