我使用c ++将程序编码为服务,当我将其作为普通程序进行测试时,函数GetCurrentDirectory
返回正确的路径。但是当我尝试将我的程序安装为服务时,GetCurrentDirectory
会返回C:\Windows\System32
而不是可执行文件的路径。
如何以适用于服务的方式获取可执行文件的路径?
答案 0 :(得分:1)
Windows服务的工作目录始终为%WINDIR%\System32
。
要获取可执行文件所在的目录,只需为hModule
参数调用NULL GetModuleFileName,然后手动删除可执行文件名。
答案 1 :(得分:1)
因为%WinDir%\System32
是32/64位Windows服务的默认工作目录(64位Windows上32位服务的%WinDir%\SysWOW64
)。
您可以将服务的工作目录设置为其他内容,另请参阅Windows Service: Can I configure the current working directory?或 - 更好 - 不要依赖有关工作目录的代码。几个选项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<service name>\ImagePath
。GetModuleFileName()
。它易于使用但要小心:它在WOW64,某些虚拟化环境和svcshot
托管服务方面有一些棘手的行为(它的有点旧但你可能想要阅读{{3} }。)QueryServiceConfig()
。我建议:
SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)
。