Как получить путь к папке Windows\system32\config\systemprofile\AppData\Local\ в С#?

Каков наилучший способ получить путь к этой папке программно: Windows\system32\config\systemprofile\AppData\Local?


person Andrei Karcheuski    schedule 03.12.2014    source источник
comment
%systemroot% приведет вас к папке Windows ... но, насколько я знаю (сделано только что), прямого ярлыка, как у нас, например, с %appdata%, нет.   -  person Rohan Büchner    schedule 03.12.2014
comment
Я считаю, что это путь AppData для учетной записи SYSTEM. Поэтому, если вы работаете под учетной записью SYSTEM, вы должны иметь возможность использовать Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) — хотя я не проверял это. Если вы работаете не под системной учетной записью, вы, вероятно, не имеете к этому никакого отношения.   -  person Joe    schedule 03.12.2014


Ответы (4)


Я не могу писать комментарии, извините. Для чего вы используете путь? Где хранится приложение? Это приведет вас туда ??

string path = "C:\\Windows\system32\config\systemprofile\AppData\Local";

При условии, что C: это имя диска.

Вам действительно нужно немного расширить свой вопрос.

Это дублирующий вопрос??

Как читать существующие текстовые файлы без указания пути

person Community    schedule 03.12.2014
comment
Я думаю, вы неправильно понимаете, что означает программно. - person Soner Gönül; 03.12.2014
comment
Да, я могу, но я подумал, что это может быть решением с точки зрения чистого кода, чтобы получить этот специальный путь к папке. - person Andrei Karcheuski; 03.12.2014
comment
@SonerGönül Нет, не знаю. Это программно. Я думаю, что то, что ищет ОП, вероятно, ближе к тому, что Рохан заявляет выше. Это зависит от того, как OP получает к нему доступ. Если его приложение есть, это System.IO.Path.Combine(appPath, etc.); Если он обращается к нему непосредственно из программы, установленной в другом месте, ему придется добавить больше пути. Как ОП получает к нему доступ. Вот в чем вопрос. Как я сказал. Я не могу комментировать, так что, думаю, на данный момент правит @downvoters. Просто пытаюсь помочь. - person ; 03.12.2014
comment
@AndreiKarcheuski Можете ли вы добавить больше деталей к вашему вопросу? Пожалуйста, смотрите мой ответ Сонеру выше - person ; 03.12.2014
comment
@FrankPytel Я просто работаю над ведением журнала в приложении С#, у меня есть задача, в которой мне нужно хранить файлы журнала в этой папке. Поэтому я просто смотрю, как программно получить путь к этой папке, приложение можно установить на другую ОС. - person Andrei Karcheuski; 03.12.2014

Образец кода

HttpContext.Current.Server.MapPath();
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
person Sunil Dhappadhule    schedule 03.05.2019

Я думаю, вы можете использовать Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData

В моем проекте вот так string configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MyProject", "SERVICER", "config.ini");

Он получает каталог данных приложения для всех пользователей (содержат систему, службу, гостя и т. д.). Я использую его для сохранения конфигурации Сервиса!!

person Henry Trần    schedule 13.11.2016
comment
Неправильно. В моей системе CommonApplicationData возвращает C:\ProgramData. - person Ant_222; 24.04.2019
comment
Извините, что это неправильно для вашей проблемы !! Но я не знаю, что вы хотите!! Зачем тебе такая ссылка?? Для хранения данных, разделяемых между учетными записями, или системный профиль будет заменен в контексте пользователя ?? Если для обоих вышеперечисленных методов метод Environment.GetFolderPath даст вам очень похожие результаты. Но если вы действительно хотите сохранить в каталог Windows\system32, рассмотрите вариант ниже: Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "config", Environment.UserName, "AppData", "Local"); - person Henry Trần; 02.05.2019
comment
Мне нужно программно создать каталог C:\Windows\System32\config\systemprofile\Desktop (в случае 32-битной архитектуры) и C:\Windows\SysWOW64\config\systemprofile\Desktop (в случае 64-битной архитектуры), если он не существует, чтобы использовать MS Office Interop из Служба Windows. - person Ant_222; 03.05.2019
comment
Извините, что не понял ваших намерений с самого начала, вот как я думаю, что вы можете использовать: Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.SystemX86), "config", "systemprofile", "AppData", "Local"); - person Henry Trần; 07.05.2019
comment
Environment.GetFolderPath(Environment.SpecialFolder.SystemX86) автоматически даст вам результат system32 или syswow64 в зависимости от исполняемого компьютера. - person Henry Trần; 07.05.2019
comment
Спасибо за информацию, Trịnh. Вы можете опубликовать ответ с помощью SpecialFolder.SystemX86! Этот член перечисления назван неправильно? - person Ant_222; 07.05.2019
comment
// Summary: // The Windows System folder. Added in the .NET Framework 4. SystemX86 = 41, Это краткая информация об этом участнике. Я думаю, может быть, вы не используете dotnet 4 или выше!! Если это так, к сожалению, я думаю, что это самый простой способ получить желаемые результаты. - person Henry Trần; 08.05.2019
comment
К сожалению, простые способы есть только в dotnet 4 и выше. Если вы все еще хотите достичь цели, вы можете обратиться к следующему, насколько я знаю, это будет работать на большинстве систем Windows, но у меня не было возможности протестировать их на более низком компьютере! [gist.github.com/DK189/11399b58985a1023f01d50118c23014a>(Источник кода) - person Henry Trần; 08.05.2019
comment
Спасибо за фрагмент, Трин. Обратите внимание, что формат ссылки Markdown не работает. Вот [правая ссылка] (gist.github.com/DK189/11399b58985a1023f01d50118c23014a). Кстати, вы можете протестировать 64-битную и 32-битную архитектуру, проверив IntPtr.Size. - person Ant_222; 08.05.2019
comment
Извините за синтаксис уценки! Что касается IntPtr.Size, у этого есть недостаток: если приложение собрано с флагом x86, оно всегда будет иметь значение 4, поэтому в вашем запросе использование IsWow64Process в kernel32 всегда будет точнее! - person Henry Trần; 09.05.2019
comment
Если приложение создано для x86, оно выполняется в среде x86, и в этом случае мне нужна `Windows\system32`. - person Ant_222; 09.05.2019
comment
Ну... если вы запускаете приложение x86 в среде x64, оно всегда возвращает Windows\system32,.. а в среде x64 systemprofile существует только в папке SysWOW64!! - person Henry Trần; 14.05.2019

Вы можете получить путь таким образом:

Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData)
person Nacharya    schedule 21.02.2015
comment
Неправильно. При вызове из службы Windows LocalApplicationData возвращает C:\Users\anton\AppData\Local в моей системе. - person Ant_222; 24.04.2019