【问题标题】:How can I get the installed directory for a C++ Windows Service?如何获取 C++ Windows 服务的安装目录?
【发布时间】:2025-11-28 02:40:01
【问题描述】:

我有一个 C++ Windows 服务,我想访问与该服务的可执行文件位于同一目录中的一个可执行文件(通过系统函数)。我想要做到这一点,我需要找到那个目录,这样我就可以引用目标可执行文件的路径。如何在代码中找到安装服务的目录?

【问题讨论】:

  • 澄清一下,您的意思是来自正在运行的服务,而不是来自其他任意应用程序,对吗?

标签: c++ windows-services


【解决方案1】:

正如其他人所提到的,GetModuleFileName() 可以完成这项工作,但 YMMV。最可靠的方法是从注册表项HKLM\System\CurrentControlSet\Services\%ServiceName%\ImagePath 中读取此信息,其中%ServiceName% 是您的服务名称。

有关使用 C++ 读取注册表的示例,请查看this out。

祝你好运!

【讨论】:

    【解决方案2】:

    您可以使用QueryServiceConfig() 函数。二进制文件的路径存储在 QUERY_SERVICE_CONFIG 结构的 lpBinaryPathName 字段中。

    【讨论】:

    • 这个函数实际上确实从注册表中获取信息。但问题是你必须有一个服务句柄,我一点也不喜欢。服务名应该够了。
    • @Vlad:如果你走注册表路线,你将需要一个注册表项的句柄。 Windows API 中的大部分内容都是通过句柄访问的。
    【解决方案3】:

    视情况而定。

    如果它来自服务内部,您始终可以使用GetModuleFileName,它会生成一个完全限定的路径。

    如果它来自另一个程序,那么既然它是服务,你可以检查服务的注册表信息。

    【讨论】:

      【解决方案4】:

      您可以使用GetModuleFileName 函数。请参阅Installing a Service 示例。

      【讨论】: