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

时间:2010-10-12 23:36:00

标签: c++ windows-services

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

4 个答案:

答案 0 :(得分:3)

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

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

祝你好运!

答案 1 :(得分:3)

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

答案 2 :(得分:2)

取决于

如果它来自服务中,您可以始终使用GetModuleFileName,这将产生一个完全限定的路径。

如果是来自其他程序,那么由于它是服务,您可以检查服务的注册表信息。

答案 3 :(得分:1)

您可以使用GetModuleFileName功能。请参阅Installing a Service示例。