La variable de entorno TEMP ocasionalmente se configura incorrectamente

La variable de entorno TEMP ocasionalmente se configura incorrectamente

De vez en cuando, encuentro que mis variables de entorno TEMP y TMP están configuradas en C:\Windows\TEMP. Deben estar configurados en %USERPROFILE%\AppData\Local\Tempy están configurados correctamente enPropiedades del sistema.

Esto se manifiesta como mensajes de error como el siguiente:

---> System.InvalidOperationException: Unable to generate a temporary class
     (result=1).
error CS2001: Source file 'C:\Windows\TEMP\gb_pz65v.0.cs' could not be found
error CS2008: No inputs specified

...que ocurre en varias aplicaciones .NET (en particular Visual Studio 2010 o SQL Server Management Studio). Alternativamente, SQL Server Management Studio informará:

Value cannot be null.
Parameter name: viewInfo (Microsoft.SqlServer.Management.SqlStudio.Explorer)

Si ejecuto PowerShell elevado, entonces $env:TEMPestá configurado correctamente. Si ejecuto PowerShell no elevado, entonces no lo es. Creo que debería configurarse correctamente en ambos casos. Si no, es al revés.

Lo mismo ocurre con CMD.EXE.

Reiniciar lo soluciona, temporalmente, hasta quealgolo vuelve a romper. Presumiblemente, algo cargado en Explorer.exe está alterando sus variables de entorno, pero ¿qué?

Los valores en el registro son correctos, incluso mientras sucede esto:

  • HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environmenttiene TEMP=%SYSTEMROOT%\Temp
  • HKCU\Environmenttiene TEMP=%USERPROFILE%\AppData\Local\Temp

Al establecer un punto de interrupción shell32!RegenerateUserEnvironmentcon WinDbg, puedo detectarlo cuando sucede, pero todavía no sé por qué explorer.exeleo las variables de entorno incorrectas.

Puedo reproducirlo consistentemente transmitiendo un WM_SETTINGCHANGEmensaje (escribí un programa C++ de una línea para hacer esto). Observar la actividad en Process Monitor muestra que explorer.exe ni siquiera mira HKCU\Environment.

¿Qué está pasando?

Respuesta1

me encontré con estoexactoEl mismo problema hace unas semanas y me ha estado volviendo loco. Creo que lo que lo está causando es una variable de ruta excesivamente larga. Encontré varios otros informes sobre variables de entorno "desaparecidas" en la web y algunas sugerencias de que estaba relacionado con un camino largo.

Eché un vistazo al mío y resultó que algunos instaladores con errores habían duplicado todas las entradas (algunas más de una vez). Debe haber un error de desbordamiento del búfer enterrado en explorer.exe en alguna parte. De todos modos, cuando eliminé los duplicados y presioné Aceptar, mi variable TEMP reapareció repentinamente (con el valor correcto) en todas las aplicaciones que inicié desde el explorador.

Respuesta2

Su perfil de usuario puede estar dañado. Intente cambiar el nombre de su perfil en C:\UsersWindows 7 y C:\Documents and SettingsWindows XP, luego reinicie e inicie sesión con las mismas credenciales para que se genere un nuevo perfil. Si eso funciona, puedes seleccionar tus archivos de tu perfil anterior y copiarlos a tu nuevo perfil.

Es extraño que hayas dicho que enviar un WM_SETTINGCHANGEmensaje no funcionó; veresta página de soporte de Windowspara un ejemplo de C#/VB que debería funcionar. Además, vea si simplemente abre y hace clic en Aceptar en el cuadro de diálogo Variables de entorno haciendo clic derecho en el icono Mi PC en su escritorio, seleccionando Propiedades en el menú de opciones, luego la pestaña Avanzado y haciendo clic en el botón Variables de entorno. Esto carga las HKCU\Environmentvariables para mí y para varios otros carteles.

Compruebe si sus HKCU\Volatile Environmentvariables se generan cuando inicia sesión. Estos deberían incluir HOMEPATH, HOMEDRIVE, USERNAMEetc. ¿Falta por completo esa clave?

Si nada funciona, una solución alternativa para mí ha sido utilizar SETXun archivo por lotes ubicado en la carpeta Inicio de todos los programas de usuarios en el menú Inicio. Para Windows XP, descárguelo SETXcomo parte deHerramientas de soporte técnico de Windows XP Service Pack 2.

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

Esto hará que sus HKCU\Environmentvariables se lean al inicio. Luego combine las claves a continuación con su registro. Serán estáticos para todos los usuarios hasta que arregle su perfil, aunque uno podría inventar un archivo por lotes más sofisticado si así lo desea. Reemplazarnombre de usuario,servidor de inicio de sesiónydominio.Este ejemplo es para Windows XP.Guárdelo como un archivo .reg, haga clic derecho y seleccione fusionar. También puedes agregarlos usando SETX. También puedes usar REG ADDo REGEDITseguido de WM_SETTINGCHANGEya que estos comandos no actualizan tu entorno actual. VerSS64para el uso de comandos de SETX, REGy 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\2]
"CLIENTNAME"="Console"
"SESSIONNAME"=""

información relacionada