我可以通过 GPO 将参数传递给 Windows 服务吗

我可以通过 GPO 将参数传递给 Windows 服务吗

我们有一个用 C++ 编写的自定义 Windows 服务。此 Windows 服务在特定域中的所有 VM 中运行。我需要将某些参数传递给该 Windows 服务,该服务应在启动期间读取这些参数。是否可以通过 GPO 做到这一点,或者应该使用其他技术?

答案1

Windows 服务控制管理器(SCM) 是 Windows 的一个组件,您可以用它来管理 下的服务数据库HKLM\System\CurrentControlSet\Services。典型的管理操作包括创建、删除、更改服务的配置等。

对于软件开发人员来说,有很多SCM API用于直接管理此数据库来执行上述类型的操作,或者您可以使用调用这些 API 的 Windows 内置命令行工具(如 sc.exe 或 net.exe)。

笔记:手动编辑注册表并不理想,因为 SCM 将配置保存在内存中,因此我始终建议尽可能与 SCM 交互,而不是直接修改数据库。

对于使用 更改现有服务的配置的情况sc.exe,请参阅页面Sc 配置。对于您的情况,我假设您需要配置binpath。例如:

服务名称:PSEXESVC

HKLM\SYSTEM\CurrentControlSet\Services\PSEXESVC

其中:ImagePath =%SystemRoot%\PSEXESVC.exe

要添加参数(例如),-arg1命令ImagePath为:

sc.exe config PSEXESVC binPath= "%SystemRoot%\PSEXESVC.exe -arg1"

重要的,这是不带引号的,如果二进制路径有空格则可能存在安全问题,因此最好使用以下命令:

sc.exe config PSEXESVC binPath= ""\"%SystemRoot%\PSEXESVC.exe"\" -arg1

答案2

一种可能的机制是通过文件传递参数。

如果您有一个可从所有虚拟机访问的网络共享,那么您可以在其中添加文件。

如果文件需要存储在每台虚拟机本地,则可以通过 GPO 将其从共享复制到本地文件夹。

有关通过 GPO 传输文件的信息,请参阅以下文章:

另一种解决方案是在注册表发生变化时推送参数。

该方法的随机参考是文章
如何通过 GPO 添加、编辑、部署和导入注册表项

相关内容