Файл конфигурации службы Windows C # - PullRequest
27 голосов
/ 13 января 2009

Я разработал приложение-службу Windows, используя Visual Studio 2008 / C #.

У меня есть файл app.config в проекте. После установки файл app.exe.config появляется рядом с исполняемым файлом, но, похоже, он не читает значения из него, когда я пытаюсь получить к ним доступ через ConfigurationManager.AppSettings.

Скопировал ли он файл конфигурации в другом месте или есть какая-то другая проблема, о которой я не знаю?

Заранее спасибо,

Martin.

Edit: Имя файла конфигурации - infact my_exe_file_name.exe.config, оно выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>

    <add key="RuntimeFrequency" value="3" />

  </appSettings>
</configuration>

и я пытаюсь читать через:

ConfigurationManager.AppSettings["RuntimeFrequency"]

Значение отладки, которое я постоянно вижу, равно «1», а не «3». Я что-то здесь не так делаю?

Ответы [ 6 ]

26 голосов
/ 14 января 2009

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

Инструмент, который я использовал для редактирования, не сообщал мне, что ему было отказано в доступе для сохранения файла - это блокнот ++, если кому-то интересно - поэтому я не мог видеть, что он не сохранялся поверх старого файла конфигурации. 1003 *

Решено, спасибо всем.

Martin.

3 голосов
/ 13 января 2009

Когда вы находитесь в режиме отладки, проверьте и посмотрите, какие настройки находятся в my_exe_file_name.vshost.exe.config. Также убедитесь, что вы изменили это в файле app.config. Visual Studio должна обновить окончательный файл конфигурации в ваших папках bin / debug.

2 голосов
/ 13 января 2009

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

System.Configuration.ConfigurationManager.OpenExeConfiguration(PATH_TO_CONFIG);
1 голос
/ 13 января 2009

Как правило, для служб Windows, которые я пишу, я помещаю файл appName.exe.config в C: \ WINDOWS \ system32 \

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

0 голосов
/ 13 января 2009

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

Если вы хотите точно знать, используется ли ваш файл, я просто удалил или закомментировал бы любое определение для RuntimeFrequency (ошибки копирования / вставки случаются) и подождал, чтобы увидеть ошибку приложения, когда ConfigurationManager пытается сослаться на запись в AppSettings, который не существует.

0 голосов
/ 13 января 2009

Файл App.config должен быть переименован в your_exe_file_name.exe.config и помещен рядом с исполняемым файлом.

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