[英]GetCurrentDirectory does not really return the path of the executable file
我正在使用c ++将程序编码为服务,当我将其作为普通程序进行测试时,函数GetCurrentDirectory
返回正确的路径。 但是,当我尝试将程序安装为服务时, GetCurrentDirectory
返回C:\\Windows\\System32
而不是可执行文件的路径。
如何以适用于服务的方式获取可执行文件的路径?
Windows服务的工作目录始终为%WINDIR%\\System32
。
要获取可执行文件所在的目录,只需将hModule
参数的NULL调用GetModuleFileName ,并手动剥离可执行文件名称。
因为%WinDir%\\System32
是32/64位Windows服务的默认工作目录( %WinDir%\\SysWOW64
是64位Windows上的32位服务)。
您可以将服务的工作目录设置为其他目录,另请参见Windows服务:我可以配置当前的工作目录吗? 或者-更好-不要在您的代码中使用工作目录。 几种选择:
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\<service name>\\ImagePath
。 GetModuleFileName()
。 它易于使用,但要小心:它在WOW64,某些虚拟化环境以及svcshot
托管服务中具有一些棘手的行为(虽然有点陈旧,但您可能需要阅读本文 。) QueryServiceConfig()
。 我的建议是:
SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.