2010-05-25 2 views
2

Если я попытаюсь получить доступ к этой системной переменной из диалогового окна «Запуск ...», Windows сообщит, что в каталоге нет существовать. Некоторые системные переменные, такие как% SYSTEMROOT% и% USERPROFILE%, работают. Следовательно, если я попытаюсь использовать предположительно несуществующую переменную, например% DEFAULTUSERPROFILE% или% PROFILESFOLDER% в C#, я ничего не получаю взамен. Есть ли что-то особенное, что мне нужно сделать, чтобы получить доступ к этим переменным?В Windows Vista и 7 я не могу получить доступ к системной переменной% DEFAULTUSERPROFILE% - она ​​отображается как не найдена

+0

Учитывая, что '% DEFAULTUSERPROFILE%' только используется при создании новых пользователей, зачем вам это нужно? – Powerlord

+0

В этом отношении вы уверены, что это системная переменная? Я не вижу его в CMD Windows XP SP3, и попытка выполнить его приводит к ошибке. – Powerlord

+0

R. Bemrose: Я использую список переменных окружения, которые MS имеет здесь: http://technet.microsoft.com/en-us/library/dd560744%28WS.10%29.aspx – ClairelyClaire

ответ

1

Мое предложение извлечь это значение непосредственно из реестра - в случае, если вы не можете расширить его:

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. Вы просто создадите больше головных болей для Раймонда Чена. –

+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

% DefaultUserProfile%, в соответствии с Microsoft, указывает на HKLM \ Micrsoft Windows NT \ CurrentVersion \ ProfileList [Default] – ClairelyClaire

2

Мне нужно указать на C: \ Users \ Default \ AppData.

Уверены ли вы? Помните, что эта папка используется для заполнения каталога inital AppData для каждого нового пользователя, добавленного в систему.

Если вы хотите реально разделяемый каталог данных приложения в .NET, то это:

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

Ну, что я делаю, это приложение для добавления игр в Game Explorer. Кажется, что если в игре нет собственного GDF.dll (в настоящее время я планирую сделать приложение), на игру должен ссылаться ярлык либо в \ Users \ $ username \ AppData \ Local \ Microsoft \ Windows \ GameExplorer \ или \ Users \ Default \ ... – ClairelyClaire