【问题标题】:Can a Windows service install another Windows service?Windows 服务可以安装另一个 Windows 服务吗?
【发布时间】: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


【解决方案1】:

对于创建服务的如何执行过程没有限制,只要该过程具有适当的权限即可。也就是说,一个进程可以作为服务运行并创建另一个服务——这里唯一需要考虑的是适当的权限级别。

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

【讨论】:

    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多