2010-05-25 3 views
2

실행 ... 대화 상자에서이 시스템 변수에 액세스하려고하면 Windows에서 해당 디렉토리가 아니라고 알려줍니다 있다. % SYSTEMROOT % 및 % USERPROFILE %와 같은 일부 시스템 변수가 작동합니다. 따라서 C#에서 % DEFAULTUSERPROFILE % 또는 % PROFILESFOLDER %와 같은 존재하지 않는 변수를 사용하려고하면 아무 것도 얻지 못합니다. 이 변수에 접근하기 위해 내가해야 할 특별한 것이 있습니까?Windows Vista 및 7에서 % DEFAULTUSERPROFILE % 시스템 변수에 액세스 할 수 없습니다 - 찾을 수 없음으로 표시됩니다.

+0

감안할 때 : 당신은 .NET의 실제 공유 응용 프로그램 데이터 디렉토리를 원하는 경우

,이입니다 새 사용자를 만들 때 사용되는 이유는 무엇입니까? – Powerlord

+0

그런데이 변수가 시스템 변수인지 확인 하시겠습니까? Windows XP SP3의 cmd에서 볼 수없고 실행하려고하면 오류가 발생합니다. – Powerlord

+0

R. Bemrose : MS가 여기에있는 환경 변수 목록을 사용하고 있습니다 : http://technet.microsoft.com/en-us/library/dd560744%28WS.10%29.aspx – ClairelyClaire

답변

1

나의 제안은 레지스트리에서 직접 그 값을 retreive하는 것입니다 - 경우에 당신은 그것을 확장 할 수 없습니다 :

public static string GetDefaultUserProfilePath() { 
    string path = System.Environment.GetEnvironmentVariable("DEFAULTUSERPROFILE") ?? string.Empty; 
    if (path.Length == 0) { 
     using (Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList")) { 
      path = (string)key.GetValue("Default", string.Empty); 
     } 
    } 
    return path; 
} 
+0

레지스트리에서 표준 API가있는 항목을 얻으려고 시도하지 마십시오. 레이몬드 첸 (Raymond Chen)의 두통이 생길 것입니다. –

+0

그게 효과가있어 - 고마워! http://technet.microsoft.com/en-us/library/dd560744%28WS.10%29.aspx#BKMK_1에있는 모든 환경 변수가 작동하지 않는 이유는 알고 싶습니다. 지금은 레지스트리 항목을 사용하겠습니다. – ClairelyClaire

2

%ALLUSERSPROFILE%을 사용해 보셨습니까?

+0

설명 할 수없는 이유로 인해, C : \ ProgramData를 가리 킵니다. 나는 C : \ Users \ Default \ AppData를 가리킬 필요가있다. 내가 레지스트리에서 프로필 디렉토리를 얻을 수 있지만, 그것은 어떤 이유로 나쁜 생각처럼 보인다. – ClairelyClaire

+1

ALLUSERSPROFILE은 모든 사용자에 대한 공유 데이터입니다. 기본 프로필은 새 사용자 프로필의 기초입니다. – Anders

0

을 당신이 언급 C 번호를 - 당신은 C#을 경로 문자열 내에서 환경 변수를 사용할 수 없습니다, 당신이 필요로하는 System.Environment을 사용하여 교체하십시오.

System.Environment.GetEnvironmentalVariable("USERPROFILE"); 

이전에 설치 한 첫 번째 사용자 이름을 가리키고 있는데 %DefaultUserProfile%을 본 적이 없습니까?

+0

Microsoft에 따르면 DefaultUserProfile %은 HKLM \ Micrsoft를 가리 킵니다. Windows NT \ CurrentVersion \ ProfileList [기본값] – ClairelyClaire

2

C : \ Users \ Default \ AppData를 가리킬 필요가 있습니다.

정말 이니? 이 폴더는 시스템에 추가 된 각 새 사용자에 대한 초기 AppData 디렉토리를 채우는 데 사용됩니다. %의 DEFAULTUSERPROFILE의 %는`아니라`것을

String commonAppData = Environment.GetFolderPath(Environment.SpecialFolders.CommonApplicationData) 
+0

글쎄, 내가하고있는 일은 게임 탐색기에 게임을 추가하는 앱을 만드는 것입니다. 게임에 자체 GDF.dll이없는 경우 (현재 앱을 동작시키는 방법을 계획하고있는 것 같습니다) 게임은 \ Users \ $ username \ AppData \ Local \에있는 바로 가기로 참조해야합니다. Microsoft \ Windows \ GameExplorer \ 또는 \ Users \ Default \ ... – ClairelyClaire