用于非pipe理员用户的Windows服务控制命令

  • 我们有两个环境,分期和生产,都运行一个Windows服务。
  • 我们使用一个构build服务器通过MSDeploy部署某个Windows服务
  • 构build步骤的一部分是运行一个CMD脚本,用于检查服务是否正在运行,如果正确,则尝试通过“net stop xxx”
  • 构build代理在域帐户下运行
  • MSDeploy正在使用NTLM身份validation

对于生产环境和登台环境,构build代理用户具有相同的权限,即使“net stop xxx”只能在一个环境中工作。

在正常环境下,“networking停止”命令失败,并显示“系统错误5,访问被拒绝”。

服务控制命令的用户权限通过subinacl实用程序设置。

我已经尝试了各种权限,而不是完全工作:

  • TOP权限导致用户无法读取服务状态
  • F或TOPS可以读取服务状态,但不能停止或启动服务 – 错误5访问被拒绝总是出现
  • 对于F,subinacl显示以下输出:“/ pace = foo \ bar ACCESS_ALLOWED_ACE_TYPE-0x0 SERVICE_ALL_ACCESS”
  • 停止和启动命令都是“访问被拒绝”

是否有任何其他权限或服务器angular色用户需要启动/停止服务? 我们不想给构build代理用户pipe理权限。


更新:

我已经深入了一点。 使用procmon,命令net和net1都是成功的,但退出状态码2。

另外,在使用同一个用户帐户通过runas在本地运行脚本时,服务停止/启动就好了,所以似乎与MSDeploy模拟有关。