我是用C++服务编码程序的路径,当我测试它作为一个正常的程序,GetCurrentDirectory
返回正确路径的功能。但是,当我尝试安装我的程序作为服务,GetCurrentDirectory
返回C:\Windows\System32
而不是可执行文件的路径。GetCurrentDirectory并没有真正恢复的可执行文件
我怎样才能让我的可执行文件的方式,将一个部门工作的路径? Windows服务的
我是用C++服务编码程序的路径,当我测试它作为一个正常的程序,GetCurrentDirectory
返回正确路径的功能。但是,当我尝试安装我的程序作为服务,GetCurrentDirectory
返回C:\Windows\System32
而不是可执行文件的路径。GetCurrentDirectory并没有真正恢复的可执行文件
我怎样才能让我的可执行文件的方式,将一个部门工作的路径? Windows服务的
工作目录总是%WINDIR%\System32
。
取得目录,你的可执行文件驻留,只需调用GetModuleFileName与NULL的hModule
说法,并手动剥离可执行文件的名称。
因为%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
托管服务(这是有点老,但你可能需要阅读this article)QueryServiceConfig()
。我建议什么:
SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)
。
谢谢你,它的工作 – duongtan