Windows服务可以安装另一个Windows服务吗?

时间:2014-11-13 16:21:21

标签: windows amazon-web-services service permissions teamcity

当我有一个Windows服务尝试安装另一个Windows服务时,我遇到了麻烦。

具体来说,我有一个TeamCity代理在Windows 2008 AWS实例上为我运行测试。这些测试是用Java编写的,它用.bat脚本来安装服务(让它称之为服务A),每次给它一个唯一的名称。

违规行位于.bat脚本中:sc create "%serviceName%" binPath= %binPath% DisplayName= "%serviceDisplayName:"=%" start= %serviceStartType%。我相信只要服务名称是唯一可行的。

如果我使用管理员帐户在命令行上手动运行测试,它确实有效。安装了服务A,测试完成,最后卸载了服务A.

我尝试将TeamCity代理作为LocalSystem运行,以管理员身份运行,以及作为管理员组成员的另一个用户运行。我也试过完全禁用UAC。

据推测,问题是访问被拒绝的类型错误,尽管目前尚不清楚。还有一些途径可供探索,但实际上这是一个简单的问题:作为服务运行的进程是否被禁止安装其他服务?我是否需要做一些特殊的事情来配置机器/帐户才能执行此操作?

安装和使用服务A的测试要点,因此解决方法不相关 - 服务A必须作为黑盒子操作。

谢谢!

1 个答案:

答案 0 :(得分:2)

只要进程具有适当的权限,创建有关 创建进程的服务的服务没有任何限制。也就是说,进程可以作为服务运行并创建另一个服务 - 这里唯一考虑的是适当的权限级别。

从进程内运行批处理脚本时经常出现的问题(与直接通过命令行上的用户输入相反)是预期的环境并不总是加载的环境。在这种情况下,似乎批处理脚本中引用的env变量在作为服务运行时未正确设置,这当然会导致服务安装失败。纠正批处理脚本被外壳时加载的环境是正确的解决方案。