我有一个在多个实例中在系统中运行的服务。我需要从服务中找到DISPLAY_NAME
服务。我已经尝试了ServiceBase.ServiceName
但它返回(可能)来自项目安装程序的服务名称,至少在这种情况下是无用的。
该服务由installutil
安装,参数为/name=
。
修改
我有一个基于Imran Balouch答案的解决方法。我在安装程序Me.Context.Parameters("name")
中读取了该名称,并将其写入ImagePath
注册表子项,并在服务中使用Environment.GetCommandLineArgs读取它。
答案 0 :(得分:4)
您是否在Windows服务项目中添加了ProjectInstaller
?如果是,则在ProjectInstaller中为服务添加ServiceInstaller
,在该ServiceInstaller中,您可以指定服务的显示名称。选择该serviceinstaller,在属性设置为Display Name
或InitializeComponent
ProjectInstaller.Designer.cs
或ProjectInstaller.Designer.vb
中,您可以将显示名称指定为:
this.yourServiceInstaller.DisplayName = "Service Display Name";
答案 1 :(得分:3)
使用ServiceController
类,您可以获得服务的显示名称,因为它的服务名称较短:
ServiceController sc = new ServiceController(this.ServiceName);
var displayName = sc.DisplayName;
正如你所说,你可以轻松地获得ServiceName
,因为它是你自己班级的一员,继承自ServiceBase
。对于在同一台计算机上运行的不同服务实例,此服务名称将不同,因为它是唯一标识符。