【问题标题】:How to Configure the Windows Service Release Tasks like Install TopShelf Windows Service in VSTS?如何配置 Windows 服务发布任务,如在 VSTS 中安装 TopShelf Windows 服务?
【发布时间】:2018-07-13 01:49:27
【问题描述】:

我正在使用 VSTS 开发 DevOps。我使用 VS2015 创建了简单的 Windows 服务应用程序,为此我通过 Windows Service Release Tasks 添加此任务,在 VSTS 中配置了发布定义。

我成功配置了启动 Windows 服务安装(TopShelf)Windows 服务停止 Windows 服务任务。

安装(TopShelf)Windows 服务的配置

在发布期间,上述 StopInstall 任务成功运行,但 Start 任务失败并出现以下错误。

运行命令停止,因为首选项变量“ErrorActionPreference”或公共参数设置为停止:没有此类服务:FirstService

因为 Install(TopShelf) Windows Service 任务不会在机器上安装 Windows 服务。但它只是成功了。

我有几个问题,比如

  1. Install(TopShelf) Windows ServiceInstall and Start Windows Service VSTS 发布任务有什么区别。
  2. 如果我使用了 Install(TopShelf) Windows Service 任务,它只有在您已经在虚拟机中运行现有的 Windows 服务时才有效,否则它将失败。但是如果我使用Install and Start Windows Service任务,它会在虚拟机中安装新的windows服务。但我无法提供已安装 Windows 服务的显示名称和说明。

【问题讨论】:

  • 详细的发布日志是什么(通过设置system.debug=true)?
  • @MarinaLiu-MSFT,这是设置system.debug为true后发布日志的onedrive链接。1drv.ms/u/s!At-JUB9_wu9CwQRRC2UEqkA6UwrW
  • 您能否将您构建的项目或具有相同错误消息的示例项目更新到一个驱动器?
  • @MarinaLiu-MSFT,这些是正确的发布日志。上图只会有所不同,但我所做的配置与上图相同。

标签: windows-services azure-devops azure-pipelines-release-pipeline


【解决方案1】:

它们是由第 3 方创建的两个扩展。因此,您可以在 VSTS Marketplace 中搜索它们并获取它们的详细信息。

关于你的问题:

安装(TopShelf)Windows 服务

这用于安装使用Topshelf 框架创建的Topshelf 服务。

安装并启动 Windows 服务

这用于通过 Power-Shell 或 InstallUtli 安装通用 Windows 服务。

所以如果你只是从 VS 创建一个通用的 Windows 服务。您应该使用第二个。

通常,要为 Windows 服务设置显示名称和描述,您需要在代码中进行设置。详情请参考这个问题:What's the best way to set a windows service description in .net

【讨论】:

  • 感谢 Eddie Chen,但我现在没有任何与 Windows 服务相关的代码,因为我正在处理客户端提供的仅包含相应 dll 和扩展等的 drop。然后我如何更改显示指定 Windows 服务的名称和描述。有没有其他方法可以更改 VSTS 版本中 windows 服务的显示名称和描述,而不是您需要更改代码。
  • @pradeep 据我所知,没有任何方法可以实现这一目标。 :(
  • @pradeep 但是您可以考虑编写自己的构建任务并让 SC.exe 安装 Windows 服务。这将允许您设置显示名称和描述。 support.microsoft.com/en-us/help/251192/…
  • 如果你不是我的,你能否更新你的答案,告诉你如何使用 sc.exe 创建自己的构建任务并设置显示名称和描述
  • @pradeep 添加命令行任务调用SC.exe安装服务或创建自己的构建任务:github.com/Microsoft/vsts-task-lib