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

标签 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。

我尝试以 LocalSystem、管理员以及属于管理员组成员的其他用户身份运行 TeamCity 代理。我也尝试过完全禁用 UAC。

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

测试的重点是安装和使用服务 A,因此解决方法并不相关 - 服务 A 必须作为黑匣子运行。

谢谢!

最佳答案

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

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

关于windows - 一个 Windows 服务可以安装另一个 Windows 服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26913545/

相关文章:

android - 从应用程序到服务的通信

java - 在 Linux 中将 Java 进程作为服务运行

c - 在 Windows 的 C/C++ 中打开 com 端口时将 HANDLE 作为参数传递

windows - 使用 Chef 的多个 tomcat 实例

windows - 在windows上捕获子进程异常

amazon-web-services - AWS AppSync - 使用自定义指令定义 GraphQL 架构

php - Gmail SMTP 在 ec2 实例中不工作

android - 任何人都可以解释服务 setForeground 方法吗?

c# - 以编程方式为桌面 "shortcut"创建快捷键组合

amazon-web-services - AWS Amplify - 配置的安全性