Currently I\'m checking it in the following way:
if (Environment.UserInteractive)
Application.Run(new ServiceControllerForm(service));
else
ServiceBase.R
Instead of using the Environment.UserInteractive
property, modify the startup method of your service to check for a "-console" command line argument. If the argument is present, then run as an ordinary application. If not, run as a service. It's not as automated as the property check, but it'd be easy to add a shortcut to the desktop that adds the "-console" command line argument for you.
As an aside, you need to be aware that interaction with the desktop has been disabled in Windows Vista and beyond. If you are running a Windows service that needs to interact with the user, the approved way of doing this now is to separate your front-end application from your Windows service and have them communicate using something like WCF.
If you need to debug your Windows service (whether it's running as a service or as an application), put a call to System.Diagnostics.Debugging.Break()
in your startup method. This will force a prompt that allows you to enter a debugging session. I use this technique to debug my Windows service all the time.