Si te encuentras con alguna parte que no entiendes puedes comentarlo y te ayudaremos lo más rápido posible.
Solución:
Tenga en cuenta que la respuesta actualmente aceptada (Molly7244) en realidad inicia la máquina virtual cuando inicia sesión, no cuando inicia la máquina. En otras palabras, no es un servicio.
Para un servicio real que se ejecuta cuando la máquina arranca, utilizo dos scripts (originalmente de aquí) junto con cygwin (cygrunsrv). Hace uso del modo VBoxHeadless como se menciona en otra parte de esta página.
El primer script ejecuta su VM a través de VBoxHeadless; obtiene el nombre de la máquina virtual correcta para ejecutar (y otra información, como el directorio de inicio de VBOX) de las variables de entorno. El segundo script instala un servicio para una VM en particular (usando cygrunsrv para llamar al primer script con el conjunto de vars de entorno correcto). Finalmente, hay un tercer archivo que contiene funciones comunes. Si pones todos estos en un directorio juntos, puedes instalar una nueva máquina virtual así:
$ VBOX_USER_HOME="/path/to/.VirtualBox/" vboxd-install MyVMName 3333
Y luego inicie el servicio con “net start vboxd-MyVMName” o “cygrunsrv -S vboxd-MyVMName”.
Aquí está el script de ejecución de VM, “vboxd”:
#!/bin/bash
# from http://forums.virtualbox.org/viewtopic.php?f=1&t=23536
##
## Manages start / stop of VirtualBox virtual machines
##
## load common functions
basedir="$(readlink -f $(dirname $0))"
source "$basedir/.libcommon" || exit 1
## parse arguments
parseArg vmName "$1" "$VBOXD_VM_NAME"
parseArg vmPort "$2" "$VBOXD_VM_PORT"
VBOX_INSTALL_PATH="$(cygpath "$VBOX_MSI_INSTALL_PATH")"
## define signal handler
function onHalt
warn "Stopping virtual machine '$vmName'"
"$VBOX_INSTALL_PATH/VBoxManage" controlvm "$vmName" savestate
exit 0
## install signal handler; cygrunsrv uses SIGTERM by default
trap 'onHalt' TERM
## hardcode this path if you like; it's required for VBox* utils to
## find the correct VirtualBox.xml config file and is usually set
## during a call to vboxd-install.
#export VBOX_USER_HOME="$USERPROFILE\.VirtualBox"
## default VBoxHeadless port specification
portSpec="-e "TCP/Ports=$vmPort""
## determine vm state
info "Querying virtual machine '$vmName' state"
vmState=$(
"$VBOX_INSTALL_PATH/VBoxManage" showvminfo "$vmName"
| grep '^State:'
| sed 's/State: *//' )
info "Virtual machine '$vmName' is $vmState"
## if vm state is saved, we can't specify port without an exception,
## as port spec requires modification of the (immutable) saved machine
## state. See http://www.virtualbox.de/ticket/3609
if [ "$vmState##saved" != "$vmState" ]; then
## state is saved; clear port specification
warn "Port specification is not allowed for saved vms"
portSpec=""
fi
## start the VM
info "Starting virtual machine '$vmName' on port $vmPort"
"$VBOX_INSTALL_PATH/VBoxHeadless" -s "$vmName" $portSpec &
## record pid of VBoxHeadless child process and wait on it
pid="$!"
info "Waiting on VBoxHeadless child process $pid"
wait "$pid"
Y aquí está el script de instalación, “vboxd-install”:
#!/bin/bash
# http://forums.virtualbox.org/viewtopic.php?f=1&t=23536
##
## Registers a VirtualBox virtual machine to start as a service via cygrunsrv
##
## load common functions
basedir="$(readlink -f $(dirname $0))"
source "$basedir/.libcommon" || exit 1
## test for presence of cygrunsrv utility
if [ ! -x "$(which cygrunsrv)" ]; then
die "Utility 'cygrunsrv' is not in path"
fi
## test VirtualBox configuration
if [ -z "$VBOX_USER_HOME" ]; then
die "Required environment variable 'VBOX_USER_HOME' is undefined. "
"Please ensure this variable is set to point to the directory "
"containing your VirtualBox.xml configuration file."
fi
configFile=$(cygpath -u "$VBOX_USER_HOME\VirtualBox.xml")
if [ ! -e "$configFile" ]; then
die "VirtualBox configuration file '$(cygpath -w $configFile)' not found"
fi
## parse arguments
parseArg vmName "$1"
parseArg vmPort "$2"
parseArg vmUser "$3" "SYSTEM"
## if vmUser is not SYSTEM, update userSpec
userSpec="--interactive"
if [ "$vmUser" != "SYSTEM" ]; then
## "interactive" option disallowed when user is specified
userSpec="--user "$vmUser""
fi
## install the service
cygrunsrv
--install "vboxd-$vmName"
--path "$basedir/vboxd"
--env "VBOXD_VM_NAME=$vmName"
--env "VBOXD_VM_PORT=$vmPort"
--env "VBOX_USER_HOME=$VBOX_USER_HOME"
--desc "VirtualBox virtual machine '$vmName' on port $vmPort"
$userSpec
--type auto
--termsig TERM
--shutsig TERM
--neverexits
--preshutdown
|| die "Failed to install service"
Y, finalmente, aquí está el script “.libcommon” al que hacen referencia ambos:
# -*-shell-script-*-
# from http://forums.virtualbox.org/viewtopic.php?f=1&t=23536
SCRIPT="$(basename $0)"
BASEDIR="$(readlink -f $(dirname $0))"
[ -z "$LOGLEVEL" ] && LOGLEVEL=2
[ -z "$LOGDATEFORMAT" ] && LOGDATEFORMAT="%Y-%m-%d %H:%M:%S "
function log
local now=""
[ -n "$LOGDATEFORMAT" ] && now=$(date +"$LOGDATEFORMAT")
echo "$SCRIPT [email protected]" >&2
function debug
[ "$LOGLEVEL" -lt 3 ] && return
log "[DEBUG] [email protected]"
function info
[ "$LOGLEVEL" -lt 2 ] && return
log "[INFO] [email protected]"
function warn
[ "$LOGLEVEL" -lt 1 ] && return
log "[WARN] [email protected]"
function error
log "[ERROR] [email protected]"
function die
error "[email protected]"
exit 1
function parseArg
local _name="$1"
local _value="$2"
local _default="$3"
if [ -z "$_value" ]; then
if [ -z "$_default" ]; then
die "Required argument '$_name' is undefined"
fi
if [ "$_default" = "*EMPTY*" ]; then
_value=""
else
_value="$_default"
fi
fi
debug "$_name="$_value""
eval "$_name="$_value""
Esta solución me funciona muy bien; con suerte, tendrás una suerte similar.
Parece que la respuesta más simple en este momento es VBoxVMService. No lo he probado todavía, intentaré recordar venir aquí y actualizar la respuesta si / cuando lo haga.
Acordado en VBoxVMService. Es muy fácil de configurar y parece funcionar bien. Puede encontrar cómo configurarlo aquí:
http://www.windows-noob.com/forums/index.php?/topic/4931-have-virtualbox-vms-start-as-a-service-on-a-windows-host/
**** EDITAR **** Según la solicitud a continuación, un resumen del enlace. Aunque la solución funcionó para mí, el mérito es de Peter Upfold – http://peter.upfold.org.uk/
- Instale Virtualbox y configure la máquina virtual para aceptar sesiones RDP.
- Descargue e instale VBoxVmService en C: vms. Solo Google VBoxVmService para obtener un enlace de descarga (lo siento, no hay suficiente representante para publicar más de 2 enlaces).
- Edite el archivo ini de VBoxVmService en C: vms:
[Settings]
ServiceName = VBoxVmService
VBOX_USER_HOME = C: Users Administrator.VirtualBox
RunAsUser =. Administrador
UserPassword = introduzca su contraseña aquí
RunWebService = no
PauseShutdown = 5000
[Vm0]
VmName = nombre de la máquina virtual en VirtualBox
ShutdownMethod = savestate
AutoStart = sí
-
Sustituya en VBOX_USER_HOME con la carpeta .VirtualBox en el directorio de inicio del usuario correcto, así como las directivas RunAsUser y UserPassword, y establezca el nombre de la máquina virtual de destino en la aplicación VirtualBox en VmName. También puede agregar más [Vmx] secciones después [Vm0] con otras máquinas virtuales para que se inicien cuando se inicie la máquina.
-
Cuando esté satisfecho con su configuración, desde un símbolo del sistema habilitado para el administrador, ejecute el siguiente comando para instalar el servicio. Una vez instalado el servicio, puede eliminar su contraseña de usuario del archivo INI, ya que está guardada en la configuración del Servicio:
C: vms VmServiceControl.exe -i
-
Ahora, debe reiniciar la computadora antes de intentar iniciar el servicio por primera vez, o no podrá ubicar las VM.
-
Al reiniciar, el servicio debería iniciarse (sujeto a la demora de ‘Automático (Inicio retrasado)’) y sus VM se iniciarán al arrancar.
Eres capaz de añadir valor a nuestra información aportando tu experiencia en las explicaciones.