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

问题描述 投票:0回答:1

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\

winapi visual-c++ boost
1个回答
3
投票

记录了

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

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

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

如果不同进程对该 API 的 2 次调用返回不同的结果,则这些进程具有不同的环境。默认情况下,进程从其父进程继承环境,但是

CreateProcess
允许您显式指定环境块。同样,
SetEnvironmentVariable
可用于更改调用进程中的环境变量。

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

© www.soinside.com 2019 - 2024. All rights reserved.