We don't run Jenkins as a Windows service. Running Jenkins slaves as a Windows service creates several problems which are showstoppers in our environment.
Some of our tests need to run on the Windows desktop (Selenium, exe playback tests, etc.).
Other of our tests need access to the desktop environment, even if they don't display on the desktop (using the desktop to pass messages between apps, etc.).
It has been much simpler for us to configure "auto-login" on our slave agents and add a batch file to startup to launch the Jenkins slave agent rather than attempt to configure a service which can interact with the desktop and behave as though it were a desktop.
It also seems more "natural" to me that I should not alter a Windows service to have desktop access. I think that Windows services are generally not intended to access the desktop, and tests which need to run as a service should not have desktop access.
Since our Windows compilation environment always requires vcvarsall.bat, and since our experience with Jenkins slaves as a service has been very bad, we configure a batch file that starts the Jenkins slave agent. Before starting the Jenkins slave agent, the batch file sets environment variables for various needs. Things like:
CALL "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_21
SET ANT_HOME=C:\apache-ant-1.9.0
SET PATH=tools;C:\Program Files (x86)\Git\bin;%ANT_HOME%\bin;%JAVA_HOME%\bin;%PATH%
javaws javaws http://172.16.16.254:8080/computer/%COMPUTERNAME%/slave-agent.jnlp