Установщик службы Windows не читает файл App.Config - PullRequest
6 голосов
/ 03 октября 2011

Я добавил App.Config в свой проект. У меня есть класс установщика (ProjectInstaller.cs), который должен читать значения из App.config. Я предоставляю ключи. Ниже приведен пример кода:

ConfigurationManager.AppSettings["CONFIG_FILE"]

Я получаю нулевые значения в соответствии с приведенным выше кодом при вызове в классе установщика. Но в файле App.Config существует значение для вышеуказанного ключа.

Ответы [ 4 ]

16 голосов
/ 23 сентября 2013

Попробуйте:

public string GetServiceNameAppConfig(string serviceName)
{
    var config = ConfigurationManager.OpenExeConfiguration(Assembly.GetAssembly(typeof(MyServiceInstaller)).Location);
    return config.AppSettings.Settings[serviceName].Value;
}
3 голосов
/ 03 октября 2011

Google помогает: http://social.msdn.microsoft.com/Forums/ar/winformssetup/thread/896e110e-692d-4934-b120-ecc99b01c562

Дело в том, что ваш установщик НЕ работает только как exe, и app.config, вызываемый так, как вы думаете, не будет загружен по умолчанию, посколькуexe, на котором установлен ваш установщик: InstallUtil.exe , и он в конечном итоге будет искать appSettings из файла InstallUtil.exe.config , который не ваш и не тот, который вам нужен, прочитайте следующее и проверьтессылки ...

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

Хитрость заключается в контексте выполнения классов установщика.Если вы устанавливаете свое приложение с помощью InstallUtil, весь код будет выполняться в том же процессе, что и InstallUtil.exe.Если вам нужно передать некоторые данные в класс Installer во время развертывания, вы должны использовать параметры установки.Они передаются установщику во время выполнения методов Install, Commit, Rollback и Uninstall средой выполнения (installutil, windows instller ...).Вы можете получить доступ к этим параметрам, используя свойство InstallContex класса установки.

В CodeProject есть отличная статья, касающаяся проектов и параметров установки: http://www.codeproject.com/dotnet/SetupAndDeployment.asp

Извлечение http://msdn2.microsoft.com/en-us/library/system.configuration.install.installcontext.aspx

1 голос
/ 20 января 2014

Давиде Пирас очень хорошо объяснил, почему вы не можете использовать свой app.config, и предлагает передать ваши значения в качестве параметров.

Я нашел хорошую и полезную статью о том, как передавать параметры в installutil.exe и использовать их в serviceInstaller или projectInstaller:

Часть 1: Использование параметров с InstallUtil

Часть 2: Настройка служб Windows с параметрами из InstallUtil

Очень кратко объясняется, как передавать аргументы и как их читать.

1 голос
/ 01 августа 2013

Для меня самым простым решением было создать файл InstallUtil.exe.config и заполнить его содержимым из файла конфигурации приложения. Установщик службы успешно прочитал этот файл конфигурации.

Я создал свою службу, выполнив следующие действия, описанные в: Размещение службы WCF в управляемой службе Windows

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