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