1

我在远程机器上有一个现有的 Windows 服务。

这是我需要做的:

  1. 停止该服务。
  2. 删除该服务。
  3. 将我的构建工件复制到该远程计算机上的指定目录。
  4. 重新创建该 Windows 服务。
  5. 启动 Windows 服务。

我的问题:

  • 我的构建代理既不能停止也不能删除现有的 Windows 服务。
  • 我不断收到以下错误:

    [SC] OpenSCManager 失败 5:

    访问被拒绝。


在此处输入图像描述

4

2 回答 2

2

@Daniel Mann 提出了正确的问题。

首先,

sc STOP $(serviceName)

应该是一个红旗。

@Daniel Mann问:

运行您的代理的服务帐户是否具有适当的权限 [执行此操作]?

但也应该问:

您希望针对哪台机器执行此操作?构建代理?

事实上,这是我的问题。当我第一次测试这个发布管道时,目标机器和构建代理恰好是同一台机器

这是一个不幸的事故,因为并非所有版本都是如此。


解决方案:

这是对的:

sc \\$(serviceMachine) STOP $(serviceName)

@Daniel Mann是正确的:

  • 运行构建代理的服务帐户必须具有适当的权限才能执行此操作。
于 2020-03-10T19:15:45.963 回答
1

有几种方法可以实现这一点,但我将描述一种我推荐使用 PowerShell 的方法:

  1. 在您的部署任务中,添加“运行 PowerShell ”任务;
  2. 选择内联脚本并粘贴下面的代码:

    Get-Service -DisplayName "YOUR_SERVICE_NAME" | Stop-Service
    
  3. 将工件文件复制到目标文件夹(就像您所做的那样);
  4. 重复步骤 1 并粘贴以下代码以重新创建并启动服务:

    $params = @{
      Name = "YOUR_SERVICE_NAME"
      BinaryPathName = "C:\WINDOWS\System32\svchost.exe -k netsvcs"
      DependsOn = "NetLogon"
      DisplayName = "Test Service"
      StartupType = "Manual"
      Description = "This is a test service."
    }
    New-Service @params
    

您可以在Microsoft Docs阅读有关服务创建参数的更多信息:

于 2020-02-12T18:04:12.360 回答