【发布时间】:2015-01-10 20:58:07
【问题描述】:
当我有一个 Windows 服务尝试安装另一个 Windows 服务时遇到问题。
具体来说,我有一个 TeamCity 代理在 Windows 2008 AWS 实例上为我运行测试。测试是用 Java 编写的,它使用 .bat 脚本来安装服务(我们称之为服务 A),每次都给它一个唯一的名称。
有问题的行在 .bat 脚本中:sc create "%serviceName%" binPath= %binPath% DisplayName= "%serviceDisplayName:"=%" start= %serviceStartType%。我相信只要服务名称是唯一的就可以了。
如果我使用管理员帐户在命令行上手动运行测试,它确实有效。安装服务 A,测试完成,最后卸载服务 A。
我尝试以 LocalSystem、Administrator 和另一个属于 administrators 组成员的用户身份运行 TeamCity 代理。我也尝试过完全禁用 UAC。
问题可能是拒绝访问类型错误,尽管目前还不清楚。仍然有一些途径可以探索,但这确实是一个简单的问题:作为服务运行的进程是否禁止安装其他服务?我需要做一些特殊的事情来配置机器/帐户以允许它执行此操作吗?
安装和使用服务 A 的测试点,因此解决方法不相关 - 服务 A 必须作为黑盒操作。
谢谢!
【问题讨论】:
-
您能否尝试制作一个测试 .bat 文件,在其中使用您要创建的服务名称的文字值,而不是使用 %serviceName% 的环境变量等。我怀疑您的 Java进程可能与您的 cmd shell 环境不同,因此实际执行的环境不同。否则,请在您的 .bat 脚本末尾暂停一下,以便您可以实际看到打印出的错误,以便我们评估真正的问题是什么。
-
这是可能的,因此您需要更多的日志记录才能找到罪魁祸首。尝试 echo 后跟命令的副本,就在之前。如果 TC 没有捕获文件,您可以重定向到文件。
-
如果 %binPath% 中有空格,我相信你需要在它周围加上双引号。
-
感谢@jon、giulio-vian、harry-johnston,您说得对:LocalSystem 可以 安装服务,即使不调整 UAC;是我的环境配置错误。我想我是固执和绝望,对不起!
标签: windows amazon-web-services service permissions teamcity