Если я попытаюсь получить доступ к этой системной переменной из диалогового окна «Запуск ...», Windows сообщит, что в каталоге нет существовать. Некоторые системные переменные, такие как% SYSTEMROOT% и% USERPROFILE%, работают. Следовательно, если я попытаюсь использовать предположительно несуществующую переменную, например% DEFAULTUSERPROFILE% или% PROFILESFOLDER% в C#, я ничего не получаю взамен. Есть ли что-то особенное, что мне нужно сделать, чтобы получить доступ к этим переменным?В Windows Vista и 7 я не могу получить доступ к системной переменной% DEFAULTUSERPROFILE% - она отображается как не найдена
ответ
Мое предложение извлечь это значение непосредственно из реестра - в случае, если вы не можете расширить его:
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;
}
Не пытайтесь напрямую совать в реестре, пытаясь получить материал, имеющий стандартный API. Вы просто создадите больше головных болей для Раймонда Чена. –
Это сработало - спасибо! Я все еще хотел бы знать, почему все переменные среды, изложенные в http://technet.microsoft.com/en-us/library/dd560744%28WS.10%29.aspx#BKMK_1, не работают, но Я сейчас использую запись в реестре. – ClairelyClaire
Вы попробовали %ALLUSERSPROFILE%
?
по какой-то необъяснимой причине, что указывает на C: \ ProgramData. Мне нужно указать на C: \ Users \ Default \ AppData. Я могу получить каталог профилей из реестра, но по какой-то причине это кажется плохой идеей. – ClairelyClaire
ALLUSERSPROFILE - это общие данные для всех пользователей, профиль по умолчанию является основой для новых профилей пользователей. – Anders
Вы упоминаете C# - вы не можете использовать переменные окружения внутри C# пути строк, вам нужно для их замены, используя System.Environment.
System.Environment.GetEnvironmentalVariable("USERPROFILE");
Я не видел %DefaultUserProfile%
раньше - она должна указывать на первое имя пользователя, который был установлен?
% DefaultUserProfile%, в соответствии с Microsoft, указывает на HKLM \ Micrsoft Windows NT \ CurrentVersion \ ProfileList [Default] – ClairelyClaire
Мне нужно указать на C: \ Users \ Default \ AppData.
Уверены ли вы? Помните, что эта папка используется для заполнения каталога inital AppData для каждого нового пользователя, добавленного в систему.
Если вы хотите реально разделяемый каталог данных приложения в .NET, то это:
String commonAppData = Environment.GetFolderPath(Environment.SpecialFolders.CommonApplicationData)
Ну, что я делаю, это приложение для добавления игр в Game Explorer. Кажется, что если в игре нет собственного GDF.dll (в настоящее время я планирую сделать приложение), на игру должен ссылаться ярлык либо в \ Users \ $ username \ AppData \ Local \ Microsoft \ Windows \ GameExplorer \ или \ Users \ Default \ ... – ClairelyClaire
Вызова SHGetFolderLocation с CSIDL_PROFILE и -1 в качестве маркеров параметра
Учитывая, что '% DEFAULTUSERPROFILE%' только используется при создании новых пользователей, зачем вам это нужно? – Powerlord
В этом отношении вы уверены, что это системная переменная? Я не вижу его в CMD Windows XP SP3, и попытка выполнить его приводит к ошибке. – Powerlord
R. Bemrose: Я использую список переменных окружения, которые MS имеет здесь: http://technet.microsoft.com/en-us/library/dd560744%28WS.10%29.aspx – ClairelyClaire