- 我们有两个环境,分期和生产,都运行一个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模拟有关。