2010-02-02 101 views
2

我已经创建了一个用.NET编写的Windows服务的安装项目。该服务取决于App.config中与生产环境(例如:生成环境中的路径不同)中的几个元素部署生产中的Windows服务 - .NET

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

我不确定最佳实践是什么。

回答

1

这不是一个最佳实践,而是我所做的,以防万一您会发现它很有趣。

我制作了App.config的副本,比方说App.config.debug和App.config.production,然后我只需打开App.config和相应的其他文件,然后复制/粘贴到App.config中即可需要。是的,这并不理想,如果您有多个生产部署目标,它肯定会吸引人,但是我还没有找到更多我喜欢的东西。如果你使用的是源代码控制,你可能会选择离开App.config,因为按照我的约定,它只是其他文件的副本。

3

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

+0

那么,在.NET中安装项目不可能? :( – Nick 2010-02-02 14:57:10

+1

+1使用WiX创建安装程序。有点学习曲线,但它非常好,可以做很多。 – JasCav 2010-02-11 22:09:38

0

没有魔术代码去做,没有设计师的帮助。

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

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

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

虽然玩得开心,但微星是EVIL。建议的意思是完全忽略关于卸载previousversions,detectifnewer等任何选项。他们不按照您期望的方式工作,升级您的服务会导致严重的痛苦。我目前正在经历这个,我们的解决方案有12个服务来管理...

0

斯彭斯对MSI格式是邪恶的是正确的。当他们无法卸载我的服务时,让自己的一些愤怒的客户:))看看http://installer.codeeffects.com。我用它们来构建我的一项服务的安装程序。到目前为止,一切都看起来不错。如果我的客户在一个月左右的时间内对这个exe安装程序没有任何问题,我打算完全采用exe格式。