Развертывание службы Windows в производстве - .NET - PullRequest
2 голосов
/ 02 февраля 2010

Я создал проект установки для службы Windows, написанный на .NET. Служба зависит от нескольких элементов в App.config, которые отличаются в среде разработки от производственной среды (например, путь к папке)

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

Я не уверен, какая лучшая практика.

Ответы [ 4 ]

3 голосов
/ 02 февраля 2010

Я давно не пользовался WiX , но это действительно отличный набор инструментов для создания установщиков. Он обладает гораздо большей функциональностью, чем встроенная в Visual Studio функция MSI. В частности, он поддерживает именно то, о чем вы спрашиваете здесь , я рекомендую перенести ваш установщик на WiX и использовать эту функцию xmlconfig.

1 голос
/ 12 февраля 2010

Это не лучшая практика, а то, что я делаю, на случай, если вам покажется интересным.

Я делаю копии App.config, скажем, App.config.debug и App.config.production, и я просто открываю App.config и соответствующий другой файл, а затем при необходимости копирую / вставляю в App.config , Да, это не идеально, и, конечно, было бы плохо, если бы у вас было более одной цели развертывания, но я не нашел ничего, что бы мне понравилось больше. Если вы используете управление исходным кодом, вы можете оставить App.config вне его, так как в моем соглашении это просто копия одного из других файлов.

0 голосов
/ 11 февраля 2010

Спенс прав, что формат MSI - это зло. У меня есть несколько рассерженных клиентов, которые не могут удалить мой сервис :)) Посмотрите на http://installer.codeeffects.com. Я использовал их для создания установщика одного из моих сервисов. Пока все выглядит хорошо в тестировании. Я планирую полностью перейти на формат exe, если у моих клиентов не будет проблем с установщиком exe в течение месяца или около того.

0 голосов
/ 10 февраля 2010

Нет магического кода для этого, нет помощи дизайнера.

Я создал класс установщика .net и использовал его для доступа к установленным службам app.config:

ConfigurationManager.OpenExeConfiguration(Context.Parameters["assemblypath"]);

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

Веселитесь, MSI - ЗЛО. Совет - ПОЛНОСТЬЮ игнорировать любой из вариантов удаления предыдущих версий, обнаружения новых и т. Д. Они работают не так, как вы ожидаете, и обновление вашего сервиса вызовет у вас сильную боль. Сейчас я испытываю это, и наше решение имеет 12 служб для управления ...

...