Переменная среды TEMP иногда задается неправильно

иногда я нахожу переменные среды 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.

что происходит?

19
задан barlop
28.12.2022 0:27 Количество просмотров материала 2442
Распечатать страницу

2 ответа

Я столкнулся с этим exact та же проблема несколько недель назад, и это меня заводит. Я думаю, что причиной этого является чрезмерно длинная переменная пути. Я нашел несколько других отчетов об "исчезающих" переменных среды вокруг интернета и некоторые предположения о том, что это связано с длинным путем.

Я посмотрел на свой, и оказалось, что некоторые багги установщики дублировали все записи (некоторые более одного раза). Там должна быть ошибка переполнения буфера похоронен в проводнике.exe где-то. Во всяком случае, когда я удалил дубликаты и нажал OK, моя временная переменная внезапно снова появилась (с правильным значением) во всех приложениях, которые я запустил из проводника.

1
отвечен Peter Ruderman 2022-12-29 08:15

ваш профиль пользователя может быть поврежден. Попробуйте переименовать свой профиль в C:\Users в Windows 7 и C:\Documents and Settings В Windows XP, затем перезапуск и вход с теми же учетными данными, так что новый профиль генерируется. Если вы можете выбрать ваши файлы от старого профиля и скопировать их в новый профиль.

странно, что вы сказали, что отправка WM_SETTINGCHANGE сообщение не работает; см. эта страница поддержки Windows для примера C#/VB, который должен работать. Кроме того, смотрите, если просто откройте и нажмите кнопку ОК в диалоговом окне Переменные среды, щелкнув правой кнопкой мыши значок Мой компьютер на рабочем столе, выбрав Свойства В меню Параметры, а затем вкладку Дополнительно и нажав кнопку Переменные среды. Это загружает HKCU\Environment переменные для меня и несколько других плакатов.

проверьте, если ваш HKCU\Volatile Environment переменные создаются при входе в систему. Они должны включать HOMEPATH,HOMEDRIVE,USERNAME etc. Это ключ полностью не хватает?

если ничего не работает, обходной путь для меня, чтобы использовать SETX в пакетном файле, размещенном в папке "Все программы пользователей" в меню "Пуск". Для Windows XP, скачать SETX в рамках Windows XP Service Pack 2 Support Tools.

SET HOME=
SET HOME=%USERPROFILE%
SETX HOME "%HOME%"

это вызовет ваш HKCU\Environment переменные для чтения на начальном этапе. Затем слить ключи с реестра. Они будут статичными для всех пользователей, пока вы не исправите свой профиль, хотя можно придумать более сложный пакетный файл, если они были настолько склонны. Заменить имя пользователя,вход в систему-сервер и домен. этот пример предназначен для Windows XP. Сохранить как .reg-файл, щелкните правой кнопкой мыши и выберите пункт Объединить. Вы также можете добавить их с помощью SETX. Вы также можете использовать REG ADD или REGEDIT следовал по WM_SETTINGCHANGE поскольку эти команды не обновляют текущую среду. См.SS64 для использования команды SETX,REG и REGEDIT.

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Volatile Environment]
"APPDATA"="C:\Documents and Settings\<username>\Application Data"
"HOMEPATH"="\Documents and Settings\<username>"
"HOMEDRIVE"="C:"
"LOGONSERVER"="\\<logon-server>"
"USERDOMAIN"="<domain>"
"USERNAME"="<username>"
"USERPROFILE"="C:\Documents and Settings\<username>"
"USERDNSDOMAIN"="<domain.com>"
"LOCALAPPDATA"="C:\Documents and Settings\<username>\Local Settings\Application Data"

[HKEY_CURRENT_USER\Volatile Environment]
"CLIENTNAME"="Console"
"SESSIONNAME"=""
0
отвечен Mark Mikofski 2022-12-29 10:32

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх