How do I configure the name of a Windows service upon installation (or easily at compile time)?

百般思念 提交于 2019-11-28 17:34:51

I tried accessing a configuration using

ConfigurationManager.OpenExeConfiguration(string exePath)

in the installer, but couldn't get it to work.

Instead I decided to use System.Environment.GetCommandLineArgs() in the installer like this:

string[] commandlineArgs = Environment.GetCommandLineArgs();

string servicename;
string servicedisplayname;
ParseServiceNameSwitches(
    commandlineArgs, 
    out servicename, 
    out servicedisplayname);

serviceInstaller.ServiceName = servicename;
serviceInstaller.DisplayName = servicedisplayname;

Now I can install my services using

InstallUtil.exe /i InstallableService.dll /servicename="myserviceinstance_2" /servicedisplayname="My Service Instance 2"

I wrote up a more elaborate explanation here.

Reed Copsey

You can't pass this in as a command line arg, since InstallUtil doesn't provide the right hooks for that.

However, you can make your service installer read the ServiceName from a config file. If you look at some code for a typical ServiceInstaller, you'll see it's just a matter of having the appropriate DisplayName and ServiceName properties setup at runtime. These could easily be read from a configuration file instead of being hard-coded.

Instead of using Environment.GetCommandLineArgs(); the class Installer has a property called Context from which you can access command line arguments passed to InstallUtil structured in a nice StringDictionary.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!