繁体   English   中英

GetCurrentDirectory并不真正返回可执行文件的路径

[英]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
  • 使用WMI枚举服务(如果您确实要...)
  • 使用GetModuleFileName() 它易于使用,但要小心:它在WOW64,某些虚拟化环境以及svcshot托管服务中具有一些棘手的行为(虽然有点陈旧,但您可能需要阅读本文 。)
  • 使用QueryServiceConfig()

我的建议是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM