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

标签 windows configuration msbuild service windows-installer

您好, 我正在尝试弄清楚如何使用 MSBuild 和 Visual Studio 2010 实现以下场景。

  1. 我想安装一组三项服务。默认安装目录应随构建(qa、uat 和生产)而变化。
  2. 为了给整个事情添加另一个有趣的皱纹,有时当我们处于峰值负载时,uat 环境可能会被压入服务,因此服务的每个构建都需要有一个不同的名称。它不会经常发生,但它在列表中。如何配置服务安装程序以动态更改服务名称?
  3. 我希望能够为服务创建 MSI 安装程序(无论当前构建是什么)。我已经为我正在使用的各种网站准备了一个现有且广泛的 MSBuild 脚本,但我有点不确定如何继续让这些服务正常工作。
  4. 显然,每个服务构建的配置文件都不同。
  5. 我已经为每项服务添加了安装程序类。

我想我对如何开始这个有点困惑,所以我能得到的任何帮助都会很棒。我考虑过简单地硬编码不同的服务名称并使用条件编译语句来设置它们,但我认为这样做并不是解决所有问题的特别明确的方法。有什么想法吗?

最佳答案

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

注意:属性文件将包含您的数据库连接字符串、TargetDir、ServiceName 等内容。

服务名称在安装时指定,请参阅“sc”、“installutil”或 WindowsService msbuild extensions pack task下面的片段。这意味着您可以在每个目录中复制相同的服务位,并使用唯一的名称(例如 QAService、UATService、PRODService)安装每个目录。

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

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

该方法与 MSI 安装程序类似。我假设您的安装程序会提示所有必要的环境特定配置数据...所有 [体面的] 安装程序都可以通过文件提供答案而不是交互式地使用安装程序。因此,如上所述,您为每个环境创建一个答案文件并将其提供给命令行上的安装程序。

您不想在构建时执行此操作...因此每个平台都有一个单独的安装程序。被迫使用旧版本的 wyse 安装程序执行此操作。让我很难过。您需要一个可以在每个环境中运行的单一 MSI 安装程序(给定环境特定的应答文件)。

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

干杯, /jhd

关于windows - 使用 MSBuild 为具有可配置服务名称的 Windows 服务生成 MSI 安装程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5559317/

相关文章:

php - 等待创建文件

c++ - MSBuild 在构建时将 nuget 包应用于项目

c# - 在用户提供时获取代码中的 Windows 特殊文件夹

c# - 简单 C# 应用程序的配置方法(事件日志记录)

c++ - Windows 嵌入式标准不是有效的 win32 c++

java - 是否可以使用 spring-security 来保护包含的 jsp?

.net - "Unrecognized configuration section connectionStrings."

c# - 由于依赖程序集的版本号,依赖程序集未复制到输出目录

Python raw_input 弄乱了字符串连接

windows - 我可以在构建 Go 程序的同时静态链接一些 DLL 吗?