65.9K
CodeProject is changing. Read more.
Home

Using Installutil to install a Windows Service and passing it parameters for the service

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.31/5 (5 votes)

Apr 29, 2008

CPOL

2 min read

viewsIcon

79784

downloadIcon

1704

Pass parameters to InstallUtil so that it will use them when it installs the service into the Service Control Manager

Introduction

There are many complaints about the InstallUtil that is used to install Windows Services that are built using .NET. Albeit the utility is not great, the most common complaint is that it can't pass paramters to the installer class that developers are forced to include in there service. This very simple sample shows that you can indeed pass paramters from the InstallUtil command line and access them from your installer class.

Background

Windows services written in the .NET languages are encouraged to use the Installer class to register the service with the SCM (Service Control Manager). Then once the service is complete, a command line utility called InstallUtil is used to 'register' the new service with Windows. The InstallUtil looks in your .NET assembly for a class derived from System.Configuration.Install.Installer and executes it to perform the 'registration' (confusingly called installation). There are lots of questions on the 'net asking how to pass parameters from the command line of InstallUtil to this embedded Installer class so that the service can be registered with a specific account, service name, display name, ect. This sample will hopefully show how to do that.

Using the code

The service part of the sample does absolutely nothing as the code focuses on the embedded installer class. If you want a sample of how to code a Windows Service, there are thousands on this site and other site on the 'net. The quick part of the solution is the Context property of the Installer class. This property is a Dictionary collection, with every parameter of the command line given to Installutil in it. They are already broken out into Key and Value pairs, and it is just a matter of iterating the collection and using the keys and values as you need them.

Points of Interest

The one thing I wished I could do is default the logtoconsole parameter to false. The default is true and with it on the output on the console is quite verbose and confusing.

History

First posted April 29th, 2008