GetTempPath возвращает другой путь в другом процессе - PullRequest
0 голосов
/ 13 июня 2018

GetTempPath возвращает C:\Users\sam\AppData\Local\Temp\ в моем приложении A в Windows 10.

Но он возвращает C:\Users\sam\AppData\Local\Temp\2\ в другом приложении B (подключенная dll в другом приложении печатает значение GetTempPath) на том же компьютере.Я предполагаю, что приложение B меняет временный путь.

Файловая система boost ведет себя так же.

auto tempDirPath = boost::filesystem::temp_directory_path();
return tempDirPath.native();

Как это происходит?Как я могу получить точно такой же временный путь C:\Users\sam\AppData\Local\Temp\?

1 Ответ

0 голосов
/ 13 июня 2018

Документируется, как API GetTempPath определяет путь к каталогу, предназначенному для временных файлов:

Функция GetTempPath проверяет наличие переменных среды вв следующем порядке и использует первый найденный путь:

  1. Путь, указанный в переменной среды TMP.
  2. Путь, указанный в переменной среды TEMP.
  3. Путьзадается переменной среды USERPROFILE.
  4. Каталог Windows.

Если 2 вызова этого API из разных процессов возвращают разные результаты, то эти процессы имеют разные среды.По умолчанию процесс наследует среду от своего родительского процесса, но CreateProcess позволяет явно указать блок среды.Аналогично, SetEnvironmentVariable может использоваться для изменения переменной среды в вызывающем процессе.

Вы можете использовать такие инструменты, как Process Explorer , чтобы проверять среду любого данного процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...