служба windows - файл конфигурации - PullRequest
7 голосов
/ 24 февраля 2011

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

У меня есть служба Windows с именем foobar.exe .У меня есть файл конфигурации приложения с именем foobar.exe.config в той же папке.

Файл конфигурации читается только при запуске?

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

Что я делаю неправильно?

Может ли служба Windows иметь динамический файл конфигурации?

Ответы [ 3 ]

7 голосов
/ 24 февраля 2011

.NET-приложения будут читать свои конфигурационные файлы при запуске и кэшировать их по соображениям производительности.

Я вижу два основных пути решения этой проблемы:

  • в вашем сервисе, отслеживайте дату / время последнего обновления для файла конфигурации. Регулярно проверяйте эту дату последнего обновления и, если вы обнаружите изменение, перезагрузите файл конфигурации

  • служба Windows NT может ответить на специальное событие OnCustomCommand. Вы можете реализовать такой обработчик событий для перезагрузки конфигурации, и когда вы действительно измените конфигурацию, у вас может быть небольшая утилита, чтобы сообщить вашему сервису об изменении конфигурации и отправить эту «пользовательскую команду» вашему сервису

2 голосов
/ 23 марта 2012

Возможно, вам придется взглянуть на использование FileSystemWatcher.См. Пример псевдо-c # -кода ниже.

private FileSystemWatcher _myWatcher;

protected override void OnStart(string[] args)
{
_myWatcher = new FileSystemWatcher();
_myWatcher.Path = path to config file;
_myWatcher.Changed += new FileSystemEventHandler(myWatcherFileChanged);
_myWatcher.NotifyFilter = NotifyFilters.LastWrite;
_myWatcher.EnableRaisingEvents = true;

}

protected override void OnStop()
{
    _myWatcher.EnableRaisingEvents = false;
}

private void myWatcherFileChanged(object sender, FileSystemEventArgs e)
{
...
}
2 голосов
/ 24 февраля 2011

Предполагается, что ваша служба Windows была написана с использованием .NET:

Файлы конфигурации читаются только при запуске. Если вы измените значения в конфигурации, вам потребуется перезапустить службу, чтобы их можно было получить.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...