Die Umgebungsvariable TEMP wird gelegentlich falsch gesetzt

Die Umgebungsvariable TEMP wird gelegentlich falsch gesetzt

Gelegentlich finde ich meine TEMP- und TMP-Umgebungsvariablen auf gesetzt C:\Windows\TEMP. Sie sollten auf gesetzt sein %USERPROFILE%\AppData\Local\Tempund sind korrekt konfiguriert inSystemeigenschaften.

Dies äußert sich in Fehlermeldungen wie den folgenden:

---> 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

...was in verschiedenen .NET-Anwendungen auftritt (insbesondere in Visual Studio 2010 oder SQL Server Management Studio). Alternativ meldet SQL Server Management Studio:

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

Wenn ich PowerShell mit erhöhten Rechten ausführe, $env:TEMPist es richtig eingestellt. Wenn ich PowerShell ohne erhöhte Rechte ausführe, ist es nicht richtig eingestellt. Ich glaube, dass es in beiden Fällen richtig eingestellt sein sollte. Wenn nicht, ist es falsch herum.

Dasselbe gilt für CMD.EXE.

Ein Neustart behebt das Problem vorübergehend, bisetwasmacht es wieder kaputt. Vermutlich bringt etwas, das in Explorer.exe geladen wurde, seine Umgebungsvariablen durcheinander, aber was?

Die Werte in der Registrierung sind korrekt, auch wenn Folgendes geschieht:

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

Indem ich mit WinDbg einen Haltepunkt setze shell32!RegenerateUserEnvironment, kann ich es abfangen, wenn es passiert, aber ich weiß immer noch nicht, warum explorer.exedie falschen Umgebungsvariablen gelesen werden.

Ich kann es konsistent reproduzieren, indem ich eine WM_SETTINGCHANGENachricht sende (ich habe dazu ein einzeiliges C++-Programm geschrieben). Wenn man die Aktivität im Prozessmonitor beobachtet, sieht man, dass explorer.exe sich das nicht einmal ansieht HKCU\Environment.

Was ist los?

Antwort1

Ich bin darauf gestoßengenaudasselbe Problem vor ein paar Wochen und es macht mich wahnsinnig. Ich denke, die Ursache ist eine übermäßig lange Pfadvariable. Ich habe im Internet mehrere andere Berichte über „verschwindende“ Umgebungsvariablen gefunden und einige Hinweise darauf, dass es mit einem langen Pfad zusammenhängt.

Ich habe mir meine angesehen und es stellte sich heraus, dass einige fehlerhafte Installationsprogramme alle Einträge dupliziert hatten (einige mehr als einmal). Irgendwo in explorer.exe muss ein Pufferüberlauf-Fehler verborgen sein. Wie auch immer, als ich die Duplikate entfernte und auf OK klickte, erschien meine TEMP-Variable plötzlich wieder (mit dem richtigen Wert) in allen Apps, die ich vom Explorer aus startete.

Antwort2

Ihr Benutzerprofil ist möglicherweise beschädigt. Versuchen Sie, Ihr Profil unter C:\UsersWindows 7 und C:\Documents and SettingsWindows XP umzubenennen, starten Sie dann neu und melden Sie sich mit denselben Anmeldeinformationen an, damit ein neues Profil erstellt wird. Wenn das funktioniert, können Sie Ihre Dateien aus Ihrem alten Profil auswählen und in Ihr neues Profil kopieren.

Merkwürdig, dass Sie sagten, das Senden einer WM_SETTINGCHANGENachricht habe nicht funktioniert.diese Windows-Support-Seitefür ein C#/VB-Beispiel, das funktionieren sollte. Überprüfen Sie auch, ob Sie das Dialogfeld „Umgebungsvariablen“ einfach öffnen und auf „OK“ klicken, indem Sie mit der rechten Maustaste auf das Symbol „Arbeitsplatz“ auf Ihrem Desktop klicken, im Optionsmenü „Eigenschaften“ auswählen, dann die Registerkarte „Erweitert“ aufrufen und auf die Schaltfläche „Umgebungsvariablen“ klicken. Dadurch werden die HKCU\EnvironmentVariablen für mich und mehrere andere Poster geladen.

Überprüfen Sie, ob Ihre HKCU\Volatile EnvironmentVariablen beim Anmelden generiert werden. Diese sollten HOMEPATH, HOMEDRIVE, USERNAMEusw. enthalten. Fehlt dieser Schlüssel vollständig?

Wenn nichts funktioniert, habe ich eine Batchdatei verwendet, die SETXim Startordner „Alle Benutzerprogramme“ im Startmenü abgelegt ist. Für Windows XP laden Sie sie SETXals Teil vonSupporttools für Windows XP Service Pack 2.

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

Dadurch werden Ihre HKCU\EnvironmentVariablen beim Start gelesen. Fügen Sie dann die folgenden Schlüssel mit Ihrer Registrierung zusammen. Sie sind für alle Benutzer statisch, bis Sie Ihr Profil reparieren, obwohl man eine ausgefeiltere Batchdatei erstellen könnte, wenn man das möchte. Ersetzen SieNutzername,AnmeldeserverUndDomain.Dieses Beispiel gilt für Windows XP.Speichern Sie es als .reg-Datei, klicken Sie mit der rechten Maustaste und wählen Sie Zusammenführen. Sie können diese auch mit hinzufügen SETX. Sie können auch REG ADDoder REGEDITgefolgt von verwenden WM_SETTINGCHANGE, da diese Befehle Ihre aktuelle Umgebung nicht aktualisieren. SieheSS64für die Befehlsverwendung von SETX, REGund 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"=""

verwandte Informationen