Я получаю ошибку system.configuration.settingspropertynotfoundexception в службе Windows - PullRequest
2 голосов
/ 06 декабря 2011

У меня есть приложение для Windows, которое использует SettingsProvider для чтения настроек конфигурации и устанавливает значения по умолчанию, если файл не существует.

Работает нормально, работает нормально.

Я пытаюсь написать службу Windows, которая запускает это приложение. Когда он запускается службой, я получаю System.Configuration.SettingsPropertyNotFoundException для всех атрибутов настройки.

Как мне разрешить это исключение, когда служба запускает приложение?

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Это просто означает, что приложение не может прочитать файл .Settings.Я могу представить себе две возможные причины:

  1. Служба работает под учетной записью, у которой нет доступа к файлу .settings.(или в зависимости от файла .config) Это маловероятно, поскольку служба может запускать приложение, и для нее не имеет смысла иметь разрешения для приложения, а не для файла настроек.

  2. Среда выполнения не может найти файл настроек.Ожидается, что настройки находятся в корневом пути запуска исполняемого файла.Убедитесь, что он существует на рассматриваемом компьютере.

Однако, результат Google оказался очевидной возможной причиной, о которой я даже не думал.Были ли .settings добавлены после последней компиляции?Скомпилируйте приложение в Visual Studio и повторите попытку ...

1 голос
/ 27 июня 2015

Другая возможная причина - если вы пишете пользовательский 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);
    }
...