【发布时间】:2025-11-28 02:40:01
【问题描述】:
我有一个 C++ Windows 服务,我想访问与该服务的可执行文件位于同一目录中的一个可执行文件(通过系统函数)。我想要做到这一点,我需要找到那个目录,这样我就可以引用目标可执行文件的路径。如何在代码中找到安装服务的目录?
【问题讨论】:
-
澄清一下,您的意思是来自正在运行的服务,而不是来自其他任意应用程序,对吗?
标签: c++ windows-services
我有一个 C++ Windows 服务,我想访问与该服务的可执行文件位于同一目录中的一个可执行文件(通过系统函数)。我想要做到这一点,我需要找到那个目录,这样我就可以引用目标可执行文件的路径。如何在代码中找到安装服务的目录?
【问题讨论】:
标签: c++ windows-services
正如其他人所提到的,GetModuleFileName() 可以完成这项工作,但 YMMV。最可靠的方法是从注册表项HKLM\System\CurrentControlSet\Services\%ServiceName%\ImagePath 中读取此信息,其中%ServiceName% 是您的服务名称。
有关使用 C++ 读取注册表的示例,请查看this out。
祝你好运!
【讨论】:
您可以使用QueryServiceConfig() 函数。二进制文件的路径存储在 QUERY_SERVICE_CONFIG 结构的 lpBinaryPathName 字段中。
【讨论】:
视情况而定。
如果它来自服务内部,您始终可以使用GetModuleFileName,它会生成一个完全限定的路径。
如果它来自另一个程序,那么既然它是服务,你可以检查服务的注册表信息。
【讨论】:
您可以使用GetModuleFileName 函数。请参阅Installing a Service 示例。
【讨论】: