我遇到问题时,我有一个Windows服务尝试安装另一个Windows服务。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必须作为黑匣子运行。
谢谢!
您可以请尝试做一个测试.bat文件,您可以使用您希望创建的服务名称的文字值,而不是使用%serviceName%等env变量。我怀疑您的Java过程可能没有与您的cmd shell相同的环境,所以实际执行的内容有所不同。否则,请在.bat脚本的末尾放一段暂停,以便您可以实际看到打印出的错误,以便我们可以评估真正的问题。 – Jon
这是可能的,所以你需要更多的日志来找到罪魁祸首。 尝试使用echo,然后在之前使用该命令的副本。如果TC不捕获它,你可以重定向到一个文件。 –
如果%binPath%中有空格,我相信你需要在它周围加双引号。 –