After days of googling and a lot of trial and errors, I finally succeed running virtualbox as service. I tried VBoxVmService by mattz but have no luck. Then I tried another method with srvstart and Windows Service Commander explained here. It works for one Virtual Machine, but not for multiple Virtual Machines. While I need to run three Virtual Machines simultaneously. All without any user logged on! OK, enough talking, let’s start the tutorial…
-
Preparation
- I tried this only on Windows XP SP3 and Windows 2003 Server SP2 (I think it may works on Windows 2000 Server as well)
update: this method works on Windows Server 2008 (check Brian’s comment below) Thanks Brian!
update Sept 29th 2009 : it works on Windows Seven 64 bit (check Mr Incredible’s comment). Thanks Mr Incredible!
update Sept 29th 2009: it works on Windows Vista (check Victor Pajor’s comment below). Thanks Victor Pajor!
- SUN VirtualBox for Windows version 2.2.2 or more (download here)
update Oct 13th 2009: it works on Windows XP SP3 with VirtualBox 3.0.8 (check Kikeze’s comment below). Thanks Kikeze!
- srvstart (download here)
- Windows Service Commander (download here)
-
Installation
-
- Install SUN VirtualBox, create and configure your guest OS’s
- Make sure you click the Remote Display setting, and check the "Enable VRDP server" option. Then assign a port number like 3001, 3002, 3003, etc.
- Setup all your guest OS’s as needed (install applications, setup preferences, tweaks, etc.)
- Shutdown all your guest OS’s
- Go to C:\Documents and Settings\YOURUSERNAME\.VirtualBox\ and open the file VirtualBox.xml with notepad.
- Press CTRL+F (find) and type "src" without quotes and press ENTER
-
Edit the words
src="Machines\YOURVMNAMEYOURVMNAME.xml" into src="C:Documents and Settings\YOURUSERNAME\.VirtualBox\Machines\YOURVMNAME\YOURVMNAME.xml. Close the file, and click Yes when asked
"Do you want to save the changes?". If you have more than one Virtual Machines, then you must repeat this step and replace the paths to your Virtual Machines’s .xml file accordingly.
original src
modified src
-
Copy the file named
VirtualBox.xml from
C:Documents and Settings\YOURUSERNAME\.VirtualBox\ to
C:Documents and Settings\LocalService\.VirtualBox\
- Install Windows Service Commander
- Create a new directory C:\vm
- Extract the srvstart_run.v110.zip file to this C:vm directory
- Open notepad, copy and paste the code below
env=VBOXGUI="C:\Program Files\Sun\xVM VirtualBox\virtualbox.exe"
env=VBOXHEADLESS="C:\Program Files\Sun\xVM VirtualBox\vboxheadless.exe"
env=VBOXWEBSRV="C:\Program Files\Sun\xVM VirtualBox\vboxwebsrv.exe"
env=VBOXMANAGE="C:\Program Files\Sun\xVM VirtualBox\VBoxManage.exe"
env=VBOX_PROG="C:\Program Files\Sun\xVM VirtualBox\"
env=VBOX_BASE="C:\Documents and Settings\YOURUSERNAMEHERE\.VirtualBox\"
env=VBOX_MACHINES="C:\Documents and Settings\YOURUSERNAMEHERE\.VirtualBox\machines\"
env=VBOX_VDI="C:\Documents and Settings\YOURUSERNAMEHERE\.VirtualBox\HardDisks\"
env=USERPROFILE=%SystemDrive%\Documents and Settings\LocalService\
debug=1
debug_out=>C:\vm\vm.log
[YOURVMNAME]
startup=%VBOXHEADLESS% -startvm YOURVMNAME
shutdown_method=command
shutdown=%VBOXMANAGE% controlvm YOURVMNAME savestate
- Replace YOURUSERNAME above with your own windows user account, and YOURVMNAME with your own Virtual Machine’s name
- Close Notepad and save it as srvstart.ini in C:\VM
- Run Windows Service Commander
- Click Tools > Install new service
- The Service install wizard will show up, click Next
- Enter
c:\VM\srvstart.exe svc YOURVMNAME -c "c:\vm\srvstart.ini"
- Again, replace YOURVMNAME above with your own Virtual Machine’s name
- Press Next
- Enter any name you want in the Name and Display Name field (ie. My VM Service), then add some descriptions if needed (optional)
- Press Next
- Check the "Allow service to interact with desktop" option
- Press Next
- Leave the startup as Manual and error as Ignore for now
- Press Next
- Press Next again as there’s nothing to change here
- Click Finish
- Now you’ll see the new service name in the service list
- Click on it and press the triangle button at the toolbar to start the service
- If the red round icon turns into green, then your VM is running as service successfully!
- If everything’s work as expected, you can change the startup type of your service as automatic, so every time your host Windows OS runs, your VirtualBox service will also runs
- If you want to modify an existing Virtual Machine’s configuration (eg. add memory, etc), or add a new Virtual Machine, you must set the VirtualBox service’s startup type to manual first, shutdown all your guest OS’s, and restart the host OS. We do this so there is no process is locking up the VirtualBox.xml file. After restart, the .VirtualBox.xml file can be modified and recopied into C:\Documents and Settings\LocalService\.VirtualBox (see step no. 8 above)
- To control your Virtual Machines, you can use Remote Desktop Connection and put your host computer’s IP, followed by a colon and the port number u assigned in the Remote Display setting (see step no. 2 above) eg. 192.168.2.60:3001
- See the debug=1 line in the srvstart.ini file above? You can safely set it to debug=0 if no errors occurred when practicing this tutorial.
- This tutorial shows how to run a single Virtual Machine as service, next time I will write another tutorial to run multiple Virtual Machines like mine. Check out the tutorial to run multiple Virtual Machine!
- Source with some modifications from VirtualBox forum (rasker’s post)
- Snapshots will be added later.
Victor Pajor
Here is my .ini file if anyone can spot anything wrong
env=USERPROFILE=%SystemDrive%\Users\Default
env=VBOXGUI=C:\Program Files\Oracle\virtualbox\VirtualBox.exe
env=VBOXHEADLESS=C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe
env=VBOXWEBSRV=C:\Program Files\Oracle\VirtualBox\vboxwebsrv.exe
env=VBOXMANAGE=C:\Program Files\Oracle\VirtualBox\VBoxManage.exe
env=VBOX_PROG=C:\Program Files\Oracle\VirtualBox\
env=VBOX_BASE=C:\Users\strider\.VirtualBox
env=VBOX_MACHINES=C:\Users\strider\.VirtualBox\Machines
env=VBOX_VDI=D:\VM Disks
debug=2
debug_out=>c:\srvstart\vm.log
[IPCop]
startup=%VBOXHEADLESS% -startvm IPCop
shutdown_method=command
shutdown=%VBOXMANAGE% controlvm IPCop acpipowerbutton
#shutdown=%VBOXMANAGE% controlvm IPCop savestate
[cmd]
startup=c:\windows\system32\cmd.exe
[notepad]
startup=c:\windows\notepad.exe
Works as described.
Got it working with Server 2008 R2 x64 Enterprise.
Eve have UAC turned on without any issues.
Thanks!
Hi LDL, this looks great.
Question – I have Windows 7 Workstation Professional tweaked to allow multiple RDP sessions. Basically, this is the same as Server.
Can your ace hack mean that multiple users can log in and use virtualbox for an instance of e.g. XP Pro for some legacy software?
Regards, and thanks again for the hack!
JP.
@JP, Hello JP…
I’m not sure if I got your point here. But if I’m not mistaken, you want to have an XP Pro vbox inside a Windows 7 Pro host, that will run some legacy software, and it’s accessible by multiple users simultaneously.
If that’s the case, it is the XP Pro vbox that you need to hack to allow multiple RDP sessions (accessed using different user names), and not the host (in this case the Windows 7 Pro).
That way, your users can run the legacy software installed in your hacked vbox by connecting to it via RDP by typing it’s name instead of the host name.
some steps I can think of at the moment:
You have Windows 7 Pro as host (not necessarily multiple RDP hacked) to host a vbox named “XP-vbox” installed with multiple RDP hacked XP Pro and all the legacy software needed. Make sure the XP-vbox’s network connection already set to bridged instead of NAT, and it has it’s own static IP address.
Create new user accounts inside the XP-vbox as many as you need.
To connect to this XP-vbox, your users need to connect via RDP, and put “XP-vbox” (ignore the quotes) in “Computer” field if they’re on the same IP segment, or put it’s IP address if they’re on different IP segment, and use their own user name and password respectively.
good luck and CMIIW
br,
LD
I only want to say thank you!!. Excelent tutorial!.
Thanks to comments too, it gave me an idea about where was the problem.
Its important to say that YOURVMNAME is case-sentive, and if you need to fix it in the Windows Service Commander, you must delete the entry first, and then add a new service again.
Thank you, it works! Good work!
Thank you! This tutorial certainly saved me a lot of headaches.
I had to do a minor workaround for the VMs to start upon boot on a Windows Server 2008 R2 SP1 machine. Setting the service to automatic had no effect so I set them to manual instead. Then I created a scheduled task for each VM as follows:
Trigger: At system startup
Action: Start a program: sc start YOURVMSERVICENAME
Change User or Group to SYSTEM
Windows will still automatically send the shutdown command as defined in srvstart.ini when the machine shuts down.
Make sure the “env=USERPROFILE=…” line is NOT quoted, or srvstart.exe will report errors. This gave me a lot of headaches until I found this tip on virtualbox forums.
Not free but AlwaysUpdoes a good job with our VBoxes
I had an easier time just making a scheduled task that starts upon system start up. Just create a batch file with this line:
C:\Progra~1\Oracle\virtualbox\VBoxHeadless.exe -startvm {UUIDHERE}
Then add the scheduled task with the appropriate user information. It won’t be a service that has a few more parameters, but it will restart in the event of the system crashing.