2013-07-12 4 views
2

Итак, я использую Settings.settings на службе Windows, в которой я сейчас работаю, и он отлично работает для моих нужд. Единственная проблема, с которой я столкнулся, заключается в том, как обрабатываются недопустимые значения. Насколько я знаю, если я отредактирую файл exe.config и введите недопустимое значение в одном из свойств, будет использоваться значение по умолчанию, которое было зафиксировано во время разработки.Как определить, имеет ли exe.config недопустимое значение при использовании настроек

Это все хорошо, если вы хотите, чтобы ваша служба работала независимо от того, что мне нужно, но мне нужно средство для ее поиска, чтобы я мог уведомить пользователя и не дать ему потратить часы, пытаясь понять, почему услуга не работает должным образом, даже если не сообщалось об ошибках.

Есть ли способ проверить, что все свойства имеют допустимые значения в файле exe.config при использовании настроек? Я не смог найти никого.

+0

Если программа захватывает переменные, не могли бы вы просто проверить их в программе самостоятельно? Возможно, я не понимаю, чего ты хочешь здесь. – DanteTheEgregore

+0

Ну, я мог сам открыть Xml и проверить значения, но это может повредить цели использования настроек. Думаю, это был бы единственный способ сделать это. Похоже, Microsoft немного близорука. – JayPea

ответ

1

Вы можете использовать событие SettingsLoaded. Откройте файл Settings.cs и добавьте в конструктор SettingsLoaded. Sthm так:

// This class allows you to handle specific events on the settings class: 
// The SettingChanging event is raised before a setting's value is changed. 
// The PropertyChanged event is raised after a setting's value is changed. 
// The SettingsLoaded event is raised after the setting values are loaded. 
// The SettingsSaving event is raised before the setting values are saved. 
internal sealed partial class Settings { 

    public Settings() { 
     this.SettingsLoaded += OnSettingsLoadedEvent; 
    } 

    private void OnSettingsLoadedEvent(object sender, SettingsLoadedEventArgs settingsLoadedEventArgs) 
    { 
     if (SomeNumParam >= 100) 
     { 
      const string msg = "SomeNumParam is invalid! Value must be between 0 and 100"; 
      Console.WriteLine(msg); 
      throw new ArgumentOutOfRangeException(msg); 
     } 
    } 

} 
+0

Спасибо! Я думаю, что это в сочетании с предложением Erik Philips использовать недопустимые значения по умолчанию - это путь. – JayPea

1

Это все хорошо, если вы хотите сохранить свою службу не работает ни на что, но мне нужно средство, чтобы найти об этом, так что я могу уведомить пользователя и дать ему тратя часы, пытаясь понять, почему служба работает не так, как предполагалось, даже если не сообщалось об ошибках.

Это кажется совершенно противоположным тому, что он должен делать. Наличие программы с недопустимой конфигурационной информацией не имеет смысла. Обычно служба Windows во время загрузки или в какой-то момент, когда требуется обновить настройки, должна проверять их, если она не может быть записана в журнал событий, а затем остановится. Журнал событий должен записывать, какие параметры (-ы) неверны, и обычно системному администратору следить за журналами событий в Error.

Другой вариант - использовать систему ведения журнала (например, Log4net), которая поддерживает несколько способов обработки журнала (в базу данных, почту и т. Д.).

Если у вас проблема со значениями по умолчанию, я бы рекомендовал создать недопустимые значения по умолчанию.

+0

Да, я использую Log4Net. Я согласен с тем, что не имеет смысла работать с недопустимой конфигурацией, поэтому я немного удивлен реализацией Settings.settings (если я ошибаюсь и на самом деле не возвращается к значениям по умолчанию, но я думаю, что делает). – JayPea

Смежные вопросы