【问题标题】:Azure DevOps On-Premise - How can I stop and delete a windows service on a remote machine?Azure DevOps On-Premise - 如何停止和删除远程计算机上的 Windows 服务?
【发布时间】:2020-05-28 02:01:11
【问题描述】:

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

这是我需要做的:

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

我的问题:

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

    [SC] OpenSCManager 失败 5:

    访问被拒绝。


【问题讨论】:

  • 您采取了哪些步骤来自行解决和纠正问题?运行您的代理的服务帐户是否具有适当的权限?

标签: azure-devops windows-services azure-devops-extensions azure-devops-server-2019 azure-devops-server


【解决方案1】:

@Daniel Mann asked the right question.

首先,

sc STOP $(serviceName)

应该是一个危险信号。

@Daniel Mann问:

运行您的代理的服务帐户是否具有 适当的权限[这样做]?

但也应该问:

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

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

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


解决方案:

这是正确的:

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

@Daniel Mann 是正确的:

  • 运行构建代理的服务帐户必须具有相应的权限才能执行此操作。

【讨论】:

    【解决方案2】:

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

    1. 在您的部署任务中,添加“Run 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 阅读有关服务创建参数的更多信息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      相关资源
      最近更新 更多