【发布时间】:2016-06-05 08:16:35
【问题描述】:
我正在建立一个集成测试版本,我只是想启动一个 Windows 服务。
我已经使用 InvokeProcess 命令来运行仅执行以下操作的 powershell 脚本
启动服务ServiceName
当我运行构建过程时脚本失败,但是当我在 TFS 之外执行相同的脚本时它可以工作。我在 TFS 日志中收到以下错误
Start-Service:由于以下错误,无法启动服务“ServiceName (ServiceName)”:无法打开 ServiceName 计算机“。”上的服务。
然后我尝试更改启动服务的方式并在 InvokeProcess 中使用带有参数 "Start ServiceName" 的 SC.exe,我在 TFS 中收到 Access Denied 错误,如下所示:-
SC 启动服务名称。 [SC] 启动服务:OpenService 失败 5: 访问被拒绝。
我正在使用网络服务帐户来运行构建。
经过一段时间的搜索,我得出结论,我必须以提升的权限运行 InvokeProcess,但我不知道如何在 TFS 中执行此操作。
非常感谢任何帮助。
【问题讨论】:
-
什么版本的 TFS?你在哪里调用 InvokeProcess 命令?
-
TFS 2013。我在编译和单元测试运行后添加了 InvokeProcess 命令。这些文件已部署到服务器,之后我尝试运行 Windows 服务。请注意,我不是在创建它始终存在的 Windows 服务。
-
我还尝试使用以下命令记录执行 powershell 脚本的用户:- Write-Output "UserName" ([Environment]::UserName) Write-Output "User Domain Name" ([Environment] ::UserDomainName) 它将用户名打印为 MACHINENAME$,将用户域名打印为 AD 域,而不是本地或“.”。我已授予对 service.exe 所在文件夹上 LocalMachine/Network Service 帐户的访问权限。我不知道 DomainName/MachineName$ 和 ./Network Service 是同一个帐户还是不同。
-
所以您正在编辑构建模板?
-
是的,我已经自定义了默认构建模板
标签: powershell tfs