如何获取C++ Windows服务的安装目录?

问题描述:

我有一个C++ Windows服务,并且我想要访问与服务的可执行文件相同的目录中的可执行文件(通过系统函数)。我想要做到这一点,我需要找到该目录,以便我可以参考目标可执行文件的路径。如何在代码中找到安装服务的目录?如何获取C++ Windows服务的安装目录?

+0

澄清,你的意思是从正在运行的服务,而不是从其他任意应用程序,正确的? – 2010-10-12 23:48:01

+0

这是正确的。 – 2010-10-13 14:15:30

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

取决于。

如果是在服务范围内,您始终可以使用GetModuleFileName,这会生成完全合格的路径。

如果来自另一个程序,那么因为它是服务,您可以检查该服务的注册表信息。

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

有关使用C++检查this的读取注册表的示例。

祝你好运!

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

+2

+1 - 这是获得“官方”信息的最佳方式 – 2010-10-13 01:14:28

+0

该功能实际上确实从注册表获取信息。但问题是,你必须有一个服务处理,我根本不喜欢。服务名称应该足够了。 – 2010-10-13 12:32:48

+1

@Vlad:如果你去注册表路由,你将需要一个注册表项的句柄。 Windows API中的大部分内容都是通过句柄访问的。 – Ferruccio 2010-10-13 14:44:01