我有一个 Windows 应用程序,它使用 SettingsProvider 读取配置设置并在文件不存在时设置默认值。
它工作正常运行正常。
我正在尝试编写一个启动此应用程序的 Windows 服务。当它由服务运行时,我得到System.Configuration.SettingsPropertyNotFoundException
所有设置属性。
当服务运行应用程序时,如何解决此异常?
我有一个 Windows 应用程序,它使用 SettingsProvider 读取配置设置并在文件不存在时设置默认值。
它工作正常运行正常。
我正在尝试编写一个启动此应用程序的 Windows 服务。当它由服务运行时,我得到System.Configuration.SettingsPropertyNotFoundException
所有设置属性。
当服务运行应用程序时,如何解决此异常?
这仅仅意味着应用程序无法读取 .Settings 文件。我可以想到两个可能的原因:
该服务在无权访问 .settings 文件的帐户下运行。(或 .config 文件,视情况而定)这不太可能,因为服务可以启动应用程序,并且它拥有对应用程序而不是设置文件的权限是没有意义的。
运行时找不到设置文件。它期望设置位于可执行文件的根启动路径中。检查以确保它存在于相关机器上。
然而,一个谷歌结果出现了一个明显的可能原因,我没有想到。.settings 是在上次编译后添加的吗?在 Visual Studio 中编译应用程序,然后重试...
另一个可能的原因是,如果您编写了一个SettingsProvider
在Initialize
.
就我而言,我这样做了:
public class CustomSettingsProvider : SettingsProvider
{
public override void Initialize(string name, NameValueCollection config)
{
base.Initialize(name, config);
}
}
既然name
总是被传为null
,base.Initialize
被扔了一个ArgumentNullException
。我通过像这样传递一个非空名称来修复它:
public override void Initialize(string name, NameValueCollection config)
{
base.Initialize(name ?? GetType().Name, config);
}