user496934 Asked: 2019-12-05 01:18:50 +0800 CST2019-12-05 01:18:50 +0800 CST 2019-12-05 01:18:50 +0800 CST 我可以通过 GPO 将参数传递给 Windows 服务吗 772 我们有一个用 C++ 编写的自定义 Windows 服务。此 Windows 服务在特定域中的所有 VM 中运行。我需要将某些参数传递给该服务应在启动期间读取的 Windows 服务。是否可以通过 GPO 或其他一些技术来做到这一点? windows group-policy 2 个回答 Voted harrymc 2019-12-05T01:39:40+08:002019-12-05T01:39:40+08:00 一种可能的机制是通过文件传递参数。 如果您有一个可以从所有虚拟机访问的网络共享,那么您可以在其中添加文件。 如果文件需要位于每个 VM 的本地,则可以通过 GPO 将其从共享复制到本地文件夹。 有关通过 GPO 传输文件的信息,请参阅以下文章: 使用组策略复制所有计算机上的文件 GPO 创建子文件夹并复制文件 另一种解决方案是在注册表更改时推送参数。 对该方法的随机参考是文章 如何通过 GPO 添加、编辑、部署和导入注册表项。 Best Answer HelpingHand 2019-12-05T12:29:48+08:002019-12-05T12:29:48+08:00 Windows 服务控制管理器(SCM) 是您与之交互的 Windows 组件,用于管理保存在HKLM\System\CurrentControlSet\Services. 典型的管理操作包括创建、删除、更改服务的配置等。 对于软件开发人员,有许多SCM API可用于直接管理此数据库以执行上述类型的操作,或者您可以使用 Windows 内置的命令行工具,例如调用这些 API 的 sc.exe 或 net.exe。 注意:手动编辑注册表并不理想,因为 SCM 将配置保存在内存中,因此我始终建议尽可能与 SCM 交互,而不是直接修改数据库。 对于使用 更改现有服务的配置的情况sc.exe,请参阅页面Sc config。对于您的情况,我假设您将要配置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
一种可能的机制是通过文件传递参数。
如果您有一个可以从所有虚拟机访问的网络共享,那么您可以在其中添加文件。
如果文件需要位于每个 VM 的本地,则可以通过 GPO 将其从共享复制到本地文件夹。
有关通过 GPO 传输文件的信息,请参阅以下文章:
另一种解决方案是在注册表更改时推送参数。
对该方法的随机参考是文章
如何通过 GPO 添加、编辑、部署和导入注册表项。
Windows 服务控制管理器(SCM) 是您与之交互的 Windows 组件,用于管理保存在
HKLM\System\CurrentControlSet\Services
. 典型的管理操作包括创建、删除、更改服务的配置等。对于软件开发人员,有许多SCM API可用于直接管理此数据库以执行上述类型的操作,或者您可以使用 Windows 内置的命令行工具,例如调用这些 API 的 sc.exe 或 net.exe。
注意:手动编辑注册表并不理想,因为 SCM 将配置保存在内存中,因此我始终建议尽可能与 SCM 交互,而不是直接修改数据库。
对于使用 更改现有服务的配置的情况
sc.exe
,请参阅页面Sc config。对于您的情况,我假设您将要配置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