2016-11-28 64 views
0

我是用C++服务编码程序的路径,当我测试它作为一个正常的程序,GetCurrentDirectory返回正确路径的功能。但是,当我尝试安装我的程序作为服务,GetCurrentDirectory返回C:\Windows\System32而不是可执行文件的路径。GetCurrentDirectory并没有真正恢复的可执行文件

我怎样才能让我的可执行文件的方式,将一个部门工作的路径? Windows服务的

回答

1

工作目录总是%WINDIR%\System32

取得目录,你的可执行文件驻留,只需调用GetModuleFileName与NULL的hModule说法,并手动剥离可执行文件的名称。

+0

谢谢你,它的工作 – duongtan

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
  • 使用WMI来列举服务(如果你真的想......)
  • 使用GetModuleFileName()。它易于使用,但要小心:它与WOW64,某些虚拟化环境的一些棘手的行为,并为svcshot托管服务(这是有点老,但你可能需要阅读this article
  • 使用QueryServiceConfig()

我建议什么:

  • 保存/载入你的数据在共享文件夹中已知,例如用于通用应用程序数据:SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)