Рекомендуемое место для хранения состояния Windows Service? - PullRequest
4 голосов
/ 09 января 2010

У меня есть служба Windows, написанная на C # (.Net 3.5), и мне нужно где-то сохранить состояние, чтобы при следующем запуске службы она знала, где она остановилась.

Какой магазин рекомендуется для этого типа вещей? Реестр? Что если я просто добавлю некоторые пользовательские настройки в файл Settings.settings? Где будет профиль пользователя для службы, выполняющейся как LocalSystem или NetworkService?

Ответы [ 4 ]

2 голосов
/ 09 января 2010

Лично я предпочитаю реестр для хранения состояния сервера, при условии, что это не большой объем информации.

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

1 голос
/ 09 января 2010

Я бы пошел с файлом .settings, так как его свойства безопасны от типа. Это, конечно, при условии, что сервис не будет хранить большой объем информации. Действительно ли имеет значение, где система решит сохранить файл настроек?

0 голосов
/ 09 января 2010

Если это небольшой, довольно простой блок данных, вы можете создать сериализуемый класс XML и очень легко записать его на диск при завершении работы и прочитать его при запуске. Для достаточно простого класса вы можете просто добавить атрибут [Serializable] , и XmlSerializer автоматически узнает, как его сериализовать / десериализовать.

Если у вас достаточно данных, чтобы база данных SQL лучше подходила, посмотрите SQL Server Compact Edition или System.Data.SQLite привязка для SQLite .

Оба позволят вам создать базу данных в виде одного файла без необходимости устанавливать какие-либо дополнительные службы Windows или что-либо настраивать. System.Data.SQLite даже не нужно устанавливать - он полностью содержится в .dll, на которую ссылается ваш проект.

В любом случае, наилучшее местоположение для файла, вероятно, SpecialFolder.CommonApplicationData - Я думаю, что это в конечном итоге C: \ ProgramData \ в Vista, но избегает необходимости жесткого кода точного пути. *

0 голосов
/ 09 января 2010

Мне неприятно это говорить, но лучший ответ 1002 * состоит в том, что это зависит . Без знания цели вашего обслуживания, правильный ответ не может быть дан. Сказав, что ... мир - твоя устрица, так сказать.

...