有没有办法在dllinit / loader锁定时获取应用程序目录?目前我只知道提出的方式here。由于这种方法可能会加载Shell32.dll,我认为它在dllinit期间不安全。
有任何建议/其他方式吗?
澄清:我正在搜索AppData目录,而不是可执行文件所在的目录。
答案 0 :(得分:2)
如果您正在寻找应用程序目录(EXE所在的位置),您可以使用GetModuleFileName然后使用_splitpath。 这是在kernel32中,因此没有其他DLL被加载。
答案 1 :(得分:2)
您可以使用ExpandEnvironmentStrings或GetEnvironmentVariable%APPDATA%(或%LOCALAPPDATA%,具体取决于您想要获得的路径)。这些函数来自kernel32.dll。
答案 2 :(得分:0)
您可以使用SHGetFolderPath
(CSIDL_APPDATA
或CSIDL_LOCAL_APPDATA
)或SHGetKnownFolderPath
(FOLDERID_RoamingAppData
/ FOLDERID_LocalAppData
)。
但我建议使用注册表而不是标记文件。