使用MSBuild为具有可configuration服务名称的Windows服务生成MSI安装程序

问候,我试图找出如何与MSBuild和Visual Studio 2010下面的情况。

  1. 我有一套我想要安装的三个服务。 默认的安装目录应该随着版本(qa,uat和production)而变化。
  2. 为了给这个整体增加一个有趣的皱纹,当我们处于高峰负载时,有时候uat环境可能会被压缩,所以每个构build的服务都需要一个不同的名字。 这不是经常发生,但它是在名单上。 如何configuration服务安装程序以dynamic更改服务名称?
  3. 我希望能够为服务创buildMSI安装程序(无论目前的版本是什么)。 对于我正在使用的各种网站,我有一个现有的和广泛的MSBuild脚本,但我有点不确定如何继续使服务工作。
  4. 显然,每个服务构build的configuration文件将会不同。
  5. 我已经为每个服务添加了安装程序类。

我想我对如何开始这个有点困惑,所以我能得到的任何帮助将是非常棒的。 我曾经考虑简单地对不同的服务名称进行硬编码,并使用条件编译语句来设置它们,但我认为这样做并不是一个特别清楚的方法。 有什么想法吗?

使用MSBuild或MSBuild扩展任务来构建和部署MSBuild时,将服务位压缩起来可能会更简单。 您可以将环境特定的配置数据放在msbuild .properties文件(mylocal.service.properites,qp.service.properties,uat.service.properties等)中。 这是我部署服务的方式。

注意:属性文件将包含像db连接字符串,TargetDir,ServiceName等

服务名称在安装时指定,请参阅下面的'sc','installutil'或WindowsService msbuild扩展包任务片段。 这意味着您可以复制相同的服务位everal目录并安装每个具有唯一的名称(例如QAService,UATService,PRODService)。

注意:我想强调的是,服务名称是部署时间的考虑因素,而不是构建时间的考虑因素。

<WindowsService TaskAction="Install" ServiceName="$(ServiceName)" MachineName="$(Targetserver)" ServicePath="$(FullServicePath)" User="$(User)" /> 

这个方法与MSI安装程序类似。 我假设你的安装程序提示输入所有必要的环境特定的配置数据…所有[体面的]安装程序都有一种方式来提供文件的答案,而不是交互式地使用安装程序。 因此,如上所述,您在每个环境中创建一个答案文件,并将其提供给命令行上的安装程序。

您不希望在构建时这样做,因此每个平台都有一个单独的安装程序。 被迫用古代版本的wyse安装程序来做到这一点。 让我伤心。 您希望单个MSI安装程序可以在每个环境中运行(给定环境特定的答案文件)。

MSI命令行和答案文件格式的详细信息因产品而异。 你正在使用什么安装程序包?

干杯,/ jhd