如何在启动Windows服务时阅读Windows服务配置?
我无法从我的Windows服务的配置文件(MyService.exe.config
)中读取appSettings
。请注意,服务已成功安装。如何在启动Windows服务时阅读Windows服务配置?
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
public class MyService : ServiceBase
{
public MyService()
{
InitializeComponent();
ServiceName = ConfigurationManager.AppSettings.Get("ServiceName");
}
private void InitializeComponent()
{
try
{
AutoLog = true;
CanStop = true;
}
catch (Exception e)
{
// Log error
}
}
static void Main()
{
MyService myService = new MyService();
Run(myService);
}
protected override void OnStart(string[] args)
{
// Code to do necessary things on start
}
}
在事件查看器的例外是System.Configuration.ConfigurationErrorsException
这是正确的位置读取Windows服务的配置?ConfigurationManager.AppSettings
总是返回null
。
该例外表明您的配置文件有问题。仔细检查。在异常或其内部异常中应该有更多的信息,这将会给你一个更准确的指示。
我有一些自定义'configSections'。当我的'appSettings'部分在配置文件的末尾时,一切正常!但是当它开始时,在'configSections'之前,它会抛出错误。我仍在调查。但是,你知道是否应该遵循任何特定顺序吗? – Learner 2011-04-08 11:50:50
@CSharpLearner:'configSections'必须先到达。配置文件架构记录在MSDN的某处,尽管不是所有这些都很简单。 – 2011-04-08 11:54:49
接受您的答复作为答案。你正确地发现问题将出现在配置文件本身中。一旦配置文件修复,代码就可以正常工作。 – Learner 2011-04-08 12:30:37
Windows服务将托管在svchost.exe
。所以exe名称将会不同,因此它将无法加载由.NET创建的配置。您可以
- 尝试把一个
svchost.exe.config
,看看.NET加载配置 - 使用
ConfigurationManager.OpenExeConfiguration
打开特定的配置文件和读取值
-1引用'svchost.exe'不正确。当你使用'ServiceBase'时,你通常在自己的进程中托管你的服务,因为OP已经明确完成了(MyService.exe)。 – 2011-04-08 11:14:35
我有一个现有的服务,这应该工作:ServiceName = ConfigurationManager.AppSettings [“ServiceName”];我假设你已经检查过配置文件安装在服务目录中了吗? – 2011-04-08 11:08:10
由于问题出在配置文件中,所以代码完美地工作。 'appSettings'部分出错了。见ChrisDickson的回答。 – Learner 2011-04-08 12:32:11