最可靠方式是windows用getmodulefilenamea/w、linux用readlink("/proc/self/exe")、macos用_nsgetexecutablepath+realpath;std::filesystem::current_path()返回工作目录而非exe路径,不可用于定位程序文件。

Windows 下用 GetModuleFileNameA 获取 EXE 绝对路径最可靠
在 Windows 平台,GetModuleFileNameA(或宽字符版 GetModuleFileNameW)是获取当前进程主模块(即 EXE 文件)绝对路径的底层标准方式。它不依赖环境变量、不被工作目录干扰,即使程序被符号链接启动也能返回真实磁盘路径。
常见错误是误用 GetCurrentDirectoryA —— 它返回的是「当前工作目录」,不是 EXE 所在目录,用户双击桌面快捷方式或命令行 cd 到别处再运行时结果就完全不对。
- 调用时第一个参数传
NULL或GetModuleHandleA(NULL),表示当前进程主模块 - 缓冲区大小必须 >=
MAX_PATH(260),否则可能截断;更稳妥可先用 0 长度试探,再分配内存 - 返回值为实际写入长度(不含结尾
