GetTempPath在不同的进程中返回不同的路径

时间:2018-06-13 08:12:05

标签: winapi visual-c++ boost

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\

1 个答案:

答案 0 :(得分:2)

记录了GetTempPath API确定为临时文件指定的目录路径的方式:

  

GetTempPath函数按以下顺序检查环境变量的存在,并使用找到的第一个路径:

     
      
  1. TMP环境变量指定的路径。
  2.   
  3. TEMP环境变量指定的路径。
  4.   
  5. USERPROFILE环境变量指定的路径。
  6.   
  7. Windows目录。
  8.   

如果从不同进程对此API的2次调用返回不同的结果,则这些进程具有不同的环境。默认情况下,进程从其父进程继承环境,但CreateProcess允许您显式指定环境块。同样,SetEnvironmentVariable可用于更改调用进程中的环境变量。

您可以使用Process Explorer之类的工具来检查任何给定流程的环境。