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