Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取C++;Windows服务? 我有一个C++窗口服务,我想访问一个与服务的可执行文件相同的目录(通过系统函数)。我想这样做,我需要找到那个目录,这样我就可以引用目标可执行文件的路径。如何在代码中找到安装服务的目录?_C++_Windows Services - Fatal编程技术网

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

如何获取C++;Windows服务? 我有一个C++窗口服务,我想访问一个与服务的可执行文件相同的目录(通过系统函数)。我想这样做,我需要找到那个目录,这样我就可以引用目标可执行文件的路径。如何在代码中找到安装服务的目录?,c++,windows-services,C++,Windows Services,您可以使用该功能。参见示例。视情况而定 如果它来自服务内部,则始终可以使用GetModuleFileName,这将生成完全限定的路径 如果它来自另一个程序,那么由于它是服务,您可以检查服务的注册表信息。正如其他人所提到的,GetModuleFileName()可以完成该工作,但YMMV除外。最可靠的方法是从注册表项读取此信息,其中%ServiceName%是您的服务名称 使用C++查看注册表的一个例子。 祝你好运 您可以使用该功能。二进制文件的路径存储在QUERY\u SERVICE\u CON

您可以使用该功能。参见示例。

视情况而定

如果它来自服务内部,则始终可以使用
GetModuleFileName
,这将生成完全限定的路径


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

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

使用C++查看注册表的一个例子。


祝你好运

您可以使用该功能。二进制文件的路径存储在QUERY\u SERVICE\u CONFIG结构的lpBinaryPathName字段中。

澄清一下,您的意思是从正在运行的服务,而不是从其他任意应用程序,对吗?此函数实际上从注册表获取信息。但问题是你必须有一个服务句柄,我一点都不喜欢。服务名称应该足够了。@Vlad:如果您选择注册表路径,则需要注册表项的句柄。Windows API中的大多数内容都是通过句柄访问的。