如何在使用C#编写的Windows服务中使用this.ServiceName
以编程方式获取服务名称?当我尝试这个时,它要求汇编参考,但它不接受任何东西:
string path = this.ServiceName + ".config";
但它的错误。
答案 0 :(得分:4)
您的服务需要从ServiceBase
继承System.ServiceProcess.dll
。
如果您拥有,您将能够访问this.ServiceName
财产。
样品:
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
string test = this.ServiceName;
}
protected override void OnStop()
{
}
}
如果你想从Main()(程序类)访问它,那么你可以这样做:
namespace WindowsService1
{
static class Program
{
static ServiceBase[] _servicesToRun;
static void Main()
{
_servicesToRun = new ServiceBase[]
{
new Service1()
};
string serviceName = _servicesToRun[0].ServiceName;
ServiceBase.Run(_servicesToRun);
}
}
}
答案 1 :(得分:3)
要查找服务的.config文件,请不使用服务名称。这不是CLR的工作方式,它根据EXE名称选择.config文件。修正:
var path = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
答案 2 :(得分:0)
要访问配置文件,您需要应用程序名称而不是服务名称(如果您使用的是标准.Net应用程序配置文件)。
要获取应用程序可执行文件,请使用System.AppDomain.CurrentDomain.FriendlyName