
가끔 TEMP 및 TMP 환경 변수가 C:\Windows\TEMP
. 로 설정되어야 하며 %USERPROFILE%\AppData\Local\Temp
에서 올바르게 구성되어야 합니다.시스템 속성.
이는 다음과 같은 오류 메시지로 나타납니다.
---> 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
...다양한 .NET 애플리케이션(특히 Visual Studio 2010 또는 SQL Server Management Studio)에서 발생합니다. 또는 SQL Server Management Studio에서 다음을 보고합니다.
Value cannot be null.
Parameter name: viewInfo (Microsoft.SqlServer.Management.SqlStudio.Explorer)
PowerShell을 승격된 상태로 실행하면 $env:TEMP
올바르게 설정됩니다. 권한이 상승되지 않은 PowerShell을 실행하면 그렇지 않습니다. 나는 두 경우 모두 올바르게 설정되어야 한다고 믿습니다. 그렇지 않다면 방향이 잘못된 것입니다.
CMD.EXE도 마찬가지입니다.
재부팅하면 일시적으로 문제가 해결됩니다.무엇다시 깨뜨립니다. 아마도 Explorer.exe에 로드된 무언가가 환경 변수를 엉망으로 만들고 있는 것 같습니다. 그러나 무엇입니까?
이런 일이 발생하는 동안에도 레지스트리의 값은 정확합니다.
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
있다TEMP
=%SYSTEMROOT%\Temp
HKCU\Environment
있다TEMP
=%USERPROFILE%\AppData\Local\Temp
WinDbg를 사용 하여 중단점을 설정하면 문제가 발생할 때 이를 잡을 수 있지만 왜 잘못된 환경 변수를 읽는지 shell32!RegenerateUserEnvironment
여전히 알 수 없습니다 .explorer.exe
메시지를 브로드캐스트하여 일관되게 재현할 수 있습니다 WM_SETTINGCHANGE
(이를 위해 한 줄짜리 C++ 프로그램을 작성했습니다). 프로세스 모니터에서 활동을 관찰하면 explorer.exe가 HKCU\Environment
.
무슨 일이야?
답변1
나는 이것을 만났다정확한몇 주 전에도 같은 문제가 있었고 그로 인해 나는 몹시 괴로워했습니다. 그 원인은 지나치게 긴 경로 변수 때문이라고 생각합니다. 나는 웹에서 환경 변수가 "사라지는" 것에 대한 몇 가지 다른 보고서와 그것이 긴 경로와 관련이 있다는 제안을 발견했습니다.
내 것을 살펴보니 일부 버그가 있는 설치 프로그램이 모든 항목을 복제한 것으로 나타났습니다(일부는 두 번 이상). Explorer.exe 어딘가에 버퍼 오버런 버그가 묻혀있을 것입니다. 어쨌든 중복 항목을 제거하고 확인을 누르면 탐색기에서 시작한 모든 앱에 TEMP 변수가 갑자기 (올바른 값으로) 다시 나타났습니다.
답변2
사용자 프로필이 손상되었을 수 있습니다. C:\Users
Windows 7 및 Windows XP 에서 프로필 이름을 바꾼 다음 C:\Documents and Settings
다시 시작하고 동일한 자격 증명으로 로그인하여 새 프로필이 생성되도록 해보세요. 작동하는 경우 이전 프로필에서 파일을 선별하여 새 프로필에 복사할 수 있습니다.
WM_SETTINGCHANGE
이상하게 도 메시지 전송이 작동하지 않는다고 말씀하셨어요 . 보다이 Windows 지원 페이지작동해야 하는 C#/VB 예제입니다. 또한 바탕 화면의 내 컴퓨터 아이콘을 마우스 오른쪽 버튼으로 클릭하고 옵션 메뉴에서 속성을 선택한 다음 고급 탭을 클릭하고 환경 변수 버튼을 클릭하여 환경 변수 대화 상자에서 확인을 열고 클릭했는지 확인하세요. 그러면 HKCU\Environment
나와 다른 여러 포스터에 대한 변수가 로드됩니다.
HKCU\Volatile Environment
로그온할 때 변수가 생성되고 있는지 확인하십시오 . 여기에는 HOMEPATH
, 등 HOMEDRIVE
이 포함되어야 합니다 USERNAME
. 해당 키가 완전히 누락되었나요?
SETX
아무것도 작동하지 않으면 시작 메뉴의 모든 사용자 프로그램 시작 폴더에 있는 배치 파일을 사용하는 것이 해결 방법이었습니다 . Windows XP의 경우 SETX
다음의 일부로 다운로드하세요.Windows XP 서비스 팩 2 지원 도구.
SET HOME=
SET HOME=%USERPROFILE%
SETX HOME "%HOME%"
HKCU\Environment
이렇게 하면 시작 시 변수가 읽히게 됩니다 . 그런 다음 아래 키를 레지스트리와 병합하세요. 프로필을 수정할 때까지 모든 사용자에 대해 정적인 상태로 유지되지만 원하는 경우 더 정교한 배치 파일을 만들 수도 있습니다. 바꾸다사용자 이름,로그온 서버그리고도메인.이 예는 Windows XP용입니다..reg 파일로 저장하고 마우스 오른쪽 버튼을 클릭한 후 병합을 선택하세요. 를 사용하여 이러한 항목을 추가할 수도 있습니다 SETX
. 이 명령은 현재 환경을 업데이트하지 않으므로 사용 REG ADD
하거나 REGEDIT
따를 수도 있습니다 . WM_SETTINGCHANGE
보다SS64SETX
, 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\2]
"CLIENTNAME"="Console"
"SESSIONNAME"=""