在生产中部署Windows服务 - .NET

时间:2010-02-02 01:03:17

标签: .net windows-services service

我已经为用.NET编写的Windows服务创建了一个安装项目。该服务依赖于App.config中与生产环境不同的开发环境中的几个元素(例如:文件夹的路径)

我现在有了可以在生产中运行的MSI文件来安装服务。但是,如何更改配置元素的值?

我不确定最佳做法是什么。

4 个答案:

答案 0 :(得分:3)

我暂时没有使用WiX,但它是一个非常棒的工具集,用于创建安装程序。它具有比Visual Studio内置的msi功能更多的功能。特别是它支持您所询问的here,我建议您将安装程序移至WiX并使用该xmlconfig功能。

答案 1 :(得分:1)

这不是最佳做法,而是我所做的,以防您觉得有趣。

我制作App.config的副本,比如App.config.debug和App.config.production,我只需打开App.config和相应的其他文件,然后根据需要复制/粘贴到App.config中。是的,它不是理想的,如果你有多个生产部署目标肯定会很糟糕,但我没有找到任何我喜欢的东西。如果您正在使用源代码控制,您可能会选择将App.config从其中删除,因为根据我的约定,它只是其他文件之一的副本。

答案 2 :(得分:0)

没有神奇的代码可以做到,没有设计师的帮助。

我所做的是创建一个.net安装程序类,并使用它来访问已安装的服务app.config:

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

然后,您可以使用配置管理器进行更改并将其保存回来。如果需要,您可以设计一个对话框并在自定义操作中从安装程序运行它。

虽然玩得开心,但MSI却是邪恶的。建议的意思是完全忽略有关uninstallpreviousversions,detectifnewer等的任何选项。它们不能按照您的预期工作,升级服务会导致严重的痛苦。我目前正在体验这一点,我们的解决方案有12项管理服务......

答案 3 :(得分:0)

Spence是关于MSI格式是邪恶的。当他们无法卸载我的服务时,有了一些愤怒的客户:))看看http://installer.codeeffects.com。我用它们来构建我的一个服务的安装程序。到目前为止,测试中的一切看起来还不错如果我的客户在一个月左右的时间内对这个exe安装程序没有任何问题,我打算完全转到exe格式。