如何获取C++ Windows服务的安装目录?
我有一个C++ Windows服务,并且我想要访问与服务的可执行文件相同的目录中的可执行文件(通过系统函数)。我想要做到这一点,我需要找到该目录,以便我可以参考目标可执行文件的路径。如何在代码中找到安装服务的目录?如何获取C++ Windows服务的安装目录?
取决于。
如果是在服务范围内,您始终可以使用GetModuleFileName
,这会生成完全合格的路径。
如果来自另一个程序,那么因为它是服务,您可以检查该服务的注册表信息。
正如其他人所说,GetModuleFileName()
可以做到这一点,但YMMV。最可靠的方法是从注册表项HKLM\System\CurrentControlSet\Services\%ServiceName%\ImagePath
中读取此信息,其中%ServiceName%
是您的服务的名称。
有关使用C++检查this的读取注册表的示例。
祝你好运!
您可以使用QueryServiceConfig()函数。二进制文件的路径存储在QUERY_SERVICE_CONFIG结构的lpBinaryPathName字段中。
+1 - 这是获得“官方”信息的最佳方式 – 2010-10-13 01:14:28
该功能实际上确实从注册表获取信息。但问题是,你必须有一个服务处理,我根本不喜欢。服务名称应该足够了。 – 2010-10-13 12:32:48
@Vlad:如果你去注册表路由,你将需要一个注册表项的句柄。 Windows API中的大部分内容都是通过句柄访问的。 – Ferruccio 2010-10-13 14:44:01
澄清,你的意思是从正在运行的服务,而不是从其他任意应用程序,正确的? – 2010-10-12 23:48:01
这是正确的。 – 2010-10-13 14:15:30