GetTempPath 在 Windows 10 上的应用程序 A 中返回
C:\Users\sam\AppData\Local\Temp\
。
但它在同一台计算机上的另一个应用程序 B 中返回
C:\Users\sam\AppData\Local\Temp\2\
(另一个应用程序中挂钩的 dll 打印 GetTempPath 的值)。我猜应用程序 B 更改了临时路径。
boost 文件系统的行为相同。
auto tempDirPath = boost::filesystem::temp_directory_path();
return tempDirPath.native();
这是怎么发生的?我怎样才能获得完全相同的临时路径
C:\Users\sam\AppData\Local\Temp\
?
GetTempPath
API 确定指定临时文件的目录路径的方式:
函数按以下顺序检查环境变量是否存在,并使用找到的第一个路径:GetTempPath
- TMP环境变量指定的路径。 2. TEMP环境变量指定的路径。 3. USERPROFILE环境变量指定的路径。 4.Windows目录。
如果不同进程对该 API 的 2 次调用返回不同的结果,则这些进程具有不同的环境。默认情况下,进程从其父进程继承环境,但是
CreateProcess
允许您显式指定环境块。同样,SetEnvironmentVariable
可用于更改调用进程中的环境变量。
您可以使用Process Explorer等工具来检查任何给定进程的环境。