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