иногда я нахожу переменные среды TEMP и TMP равными C:WindowsTEMP
. Они должны быть установлены на %USERPROFILE%AppDataLocalTemp
, и настроены правильно в Свойства Системы.
это проявляется в виде сообщений об ошибках, таких как:
---> System.InvalidOperationException: Unable to generate a temporary class
(result=1).
error CS2001: Source file 'C:WindowsTEMPgb_pz65v.0.cs' could not be found
error CS2008: No inputs specified
...что происходит в различных приложениях .NET (в частности, Visual Studio 2010 или SQL Server Management Studio). Кроме того, библиотеку сообщит:
Value cannot be null.
Parameter name: viewInfo (Microsoft.SqlServer.Management.SqlStudio.Explorer)
если Я запускаю PowerShell с повышенными привилегиями, а затем $env:TEMP
установлен правильно. Если я запускаю PowerShell без повышенных прав, то это не так. Считаю, что в обоих случаях он должен быть установлен правильно. Если нет, то это неправильно.
то же самое верно и для CMD.ИСПОЛНЯЕМЫЙ.
перезагрузка исправляет это, временно, до что-то снова ломает ее. Предположительно, что-то загруженное в Explorer.exe возится со своими переменными окружения, но что?
значения в реестре верны, даже когда это происходит:
HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment
иTEMP
=%SYSTEMROOT%Temp
HKCUEnvironment
иTEMP
=%USERPROFILE%AppDataLocalTemp
, установив точку останова на shell32!RegenerateUserEnvironment
С WinDbg, я могу поймать его, когда это произойдет, но я до сих пор не знаю, почему explorer.exe
читает неправильные переменные среды.
я могу воспроизвести его в эфир WM_SETTINGCHANGE
сообщение (для этого я написал однострочную программу на C++). Смотреть активность в Process Monitor показывает этот проводник.exe даже не смотрит на HKCUEnvironment
.
что происходит?