GetCurrentDirectory并没有真正恢复的可执行文件
问题描述:
我是用C++服务编码程序的路径,当我测试它作为一个正常的程序,GetCurrentDirectory
返回正确路径的功能。但是,当我尝试安装我的程序作为服务,GetCurrentDirectory
返回C:\Windows\System32
而不是可执行文件的路径。GetCurrentDirectory并没有真正恢复的可执行文件
我怎样才能让我的可执行文件的方式,将一个部门工作的路径? Windows服务的
答
因为%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
。 - 使用WMI来列举服务(如果你真的想......)
- 使用
GetModuleFileName()
。它易于使用,但要小心:它与WOW64,某些虚拟化环境的一些棘手的行为,并为svcshot
托管服务(这是有点老,但你可能需要阅读this article) - 使用
QueryServiceConfig()
。
我建议什么:
- 保存/载入你的数据在共享文件夹中已知,例如用于通用应用程序数据:
SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)
。
谢谢你,它的工作 – duongtan