How to Run VMware Player as a Windows Service for Headless Operation


2 views

Many developers need to run VMware Player instances in background without requiring user login, particularly for automated testing, CI/CD pipelines, or server virtualization scenarios. While VMware Workstation Pro supports this natively, the free Player edition requires workarounds.

The most reliable method involves using NSSM (Non-Sucking Service Manager) to wrap VMware Player executables:

nssm install "VMware Player Headless" "C:\Program Files (x86)\VMware\VMware Player\vmplayer.exe"
nssm set "VMware Player Headless" AppParameters "\"C:\path\to\vmx\file.vmx\" -X -nogui"
nssm set "VMware Player Headless" Start SERVICE_DEMAND_START
nssm start "VMware Player Headless"

For dynamic management of multiple VMs, consider this PowerShell script:

$vmList = @(
    "C:\VMs\test1.vmx",
    "C:\VMs\test2.vmx"
)

foreach ($vm in $vmList) {
    $serviceName = "VMware_" + (Split-Path $vm -Leaf).Replace(".vmx","")
    & nssm install $serviceName "C:\Program Files\VMware\VMware Player\vmplayer.exe"
    & nssm set $serviceName AppParameters ""$vm" -X -nogui"
    & nssm start $serviceName
}
  • Set VMs to auto-start in VMware preferences
  • Configure BIOS settings for headless operation
  • Enable remote access via VNC or RDP inside guest OS
  • Adjust memory allocation to prevent resource contention

Common issues and solutions:

Issue Solution
Service starts but VM doesn't run Check VMware logs in %TEMP%\vmware-username
Permission errors Run service under dedicated service account
Network connectivity loss Disable VM suspend on idle

html

Many developers require VMware Player instances to run without active user sessions, particularly for:

  • Continuous integration servers
  • Automated testing environments
  • Background virtual appliances
  • Remote development setups

Unlike VMware Workstation, Player lacks built-in service mode functionality. The main challenges include:

// Typical VMware Player command line limitations
vmplayer.exe -X → Only works with active desktop session
vmrun.exe start → Requires GUI context

The most reliable approach uses NSSM (Non-Sucking Service Manager):

@echo off
nssm install VMwarePlayerService "C:\Program Files (x86)\VMware\VMware Player\vmplayer.exe"
nssm set VMwarePlayerService AppParameters "-X C:\VMs\test_vm.vmx"
nssm set VMwarePlayerService AppDirectory "C:\Program Files (x86)\VMware\VMware Player"
nssm set VMwarePlayerService Start SERVICE_DELAYED_AUTO_START
net start VMwarePlayerService

For environments requiring more control:

# PowerShell service controller for VMware Player
$vmPath = "C:\VMs\dev_env.vmx"
$playerExe = "C:\Program Files\VMware\VMware Player\vmplayer.exe"

$serviceArgs = @{
    Name = "VMwarePlayerDaemon"
    BinaryPathName = ""$playerExe" -X "$vmPath""
    DisplayName = "VMware Player Background Service"
    StartupType = "Automatic"
    Description = "Runs VMware Player virtual machines as service"
}

New-Service @serviceArgs | Start-Service
  • Configure VMs for automatic startup in .vmx files:
    autostart = "poweron"
    autostop = "poweroff"
  • Disable VMware UI components:
    gui.exitOnCLIHLT = "TRUE"
    pref.vmplayer.exitOnPowerOff = "TRUE"
Error Solution
Service starts but VM doesn't launch Check VMware logs in %TEMP%\vmware-username
Permission denied errors Grant service account full access to VM files
Network connectivity loss Configure bridged networking instead of NAT