Installing .NET Windows Services (the easiest way)






3.17/5 (18 votes)
Installing .NET Windows services without using InstallUtil.exe
Introduction
I will demonstrate the easiest way of installing a Windows service. Using the InstallUtil.exe had been my primary mechanism of installing a Windows service until I came across Windows Services Can Install Themselves by W. Kevin Hazzard. That article has demonstrated that a service can be installed/uninstalled/launched from the command line alone. I, on the other hand, have come up with a way to install/uninstall the Windows service by double clicking the service executable.
The traditional command line approach is as follows:
C:\> InstallUtil MyWinService.exe
Kevin Hazzard’s command line approach is as follows:
C:\> MyWinSvcHost.exe -install
My approach: Just double click on the Service EXE.
Using the Code
The first double click on the service executable will install the service and the second double click on the service executable will uninstall the service. Whenever we run a Windows service, the main method gets executed as this serves as the entry point for the service. The list of existing Windows services can be fetched using the GetServices
method of the ServiceController
class. Loop through the array of services to determine if our service is already installed.
If the service does not exist on the machine, we will install it by executing the InstallMe
method of the SelfInstaller
class, followed by a message box notification of the same.
If the service does not exist on the machine, we will uninstall it by executing the UninstallMe
method of the SelfInstaller
class, followed by a message box notification of the same.
As Kevin said in his article, this style of installing the service without using the InstallUtil.exe provides us with many options of installing and invoking the service. Happy coding, my dear fellow s/w brothers. You can also find this and my other posts at Cavemansblog.
Update
Version 2.0: Code can be downloaded from the link at the top of this article (See version 2).
- Added SMESSER's code to get rid of the annoying alert box (cannot start service from the command line or a debugger) that appears after the service has been installed/uninstalled.
- Added code to make this approach more secure (Thanks to PIEBALDconsult's concern) by prompting the user, is he/she would REALLY like to install/uninstall the service.
- Moved the
WSInstaller
class to WSInstaller.cs for cleaner code.