Каков наилучший способ сохранить редактируемые пользователем настройки для службы Windows?

StackOverflow https://stackoverflow.com/questions/1202835

Вопрос

Я разрабатываю приложение, которое будет реализовано как Служба Windows и мне было интересно, каков был бы наилучший способ справиться с различными Настройки (на уровне пользователя и приложения).Дело в том, что я не совсем знаком (пока) со всеми доступными опциями, поэтому в принципе я за .Собственный NET Система.Конфигурация (ConfigurationManager.RefreshSection ("AppSettings") кажется заманчивым), хотя я все еще не могу охватить всю картину целиком, а именно, где находится app.config файл, хранящийся для данной службы, и так далее.

Итак, мой вопрос к вам, ребята, заключается в следующем: каков наилучший способ хранения редактируемых пользователем сведений о конфигурации для данной службы Windows?Заранее благодарю всех за отзывы.

Это было полезно?

Решение

Хммм ... "Редактируемые пользователем" параметры конфигурации для службы Windows...

Следует иметь в виду, что служба Windows работает в фоновом режиме, поэтому у пользователей нет прямого способа взаимодействия с ней.Что я сделал, чтобы обойти это, так это создал отдельное интерфейсное приложение, которое взаимодействует со службой Windows с помощью WCF.Таким образом, "редактируемые пользователем" параметры конфигурации сохраняются как часть настроек интерфейсного приложения, а не службы Windows.Настройки просто передаются службе Windows с помощью серии сообщений WCF по мере их изменения пользователем.

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

Редактировать:

В ответ на ваш комментарий скажу, что WCF - это просто API обмена сообщениями.Сообщения обычно определяются как классы, украшенные атрибутами DataContract и DataMember.Атрибуты ServiceContract и OperationContract определяют интерфейс службы WCF.Как только они будут определены, создать и разместить службу WCF внутри вашей службы Windows станет несложно.И если у вас есть Visual Studio 2008, создать клиентский прокси-сервер совсем несложно, поскольку VS2008 может автоматизировать это за вас.

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

Конечно, все это предполагает, что вы можете, по крайней мере, использовать .NET 3.0.Если вы используете Visual Studio 2008, то вы в хорошей форме.Вот несколько руководств, которые помогут вам начать работу:

Как только вы усвоите основные концепции, я бы порекомендовал обратиться к книге Ювала Лоуи Веб-сайт.Там есть много бесплатных загрузок, связанных с WCF, которые я нахожу очень полезными для просмотра, хотя они немного более продвинутые.Сначала разберитесь в концепциях WCF, прежде чем углубляться в них слишком далеко.

Опять же, весь смысл этого заключается в том, чтобы помочь вашим пользователям настроить различные аспекты вашей службы Windows.Если вы не предоставляете для этого интерфейсный графический интерфейс, я не уверен, как они это сделают, если не манипулировать самим файлом app.config вручную.

Надеюсь, это поможет.

Другие советы

Если вам просто нужен один словарь имя / значение для хранения параметров конфигурации, тогда app.config - самый простой ответ. В вашем решении оно называется «app.config», но при его создании оно переименовывается в имя исполняемого файла + " .config ".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top