Получить Profile Path всех пользователей
От: -prus-  
Дата: 19.03.19 16:53
Оценка:
Всем привет!

Перечисляю всех пользователей через NetQueryDisplayInformation.
Далее мне нужно получить Profile Path для всех. Попробовал NetUserGetInfo для USER_INFO_2, но там постоянно пустые usri2_home_dir. Видел SHGetKnownFolderPath, но не пойму, как для всех пользователей это сделать. Перечислять SID из реестра в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList? Подскажите, как правильно?
С уважением,
Евгений
Re: Получить Profile Path всех пользователей
От: CEMb  
Дата: 20.03.19 02:55
Оценка:
Здравствуйте, -prus-, Вы писали:

P>Всем привет!


P>Перечисляю всех пользователей через NetQueryDisplayInformation.

P>Далее мне нужно получить Profile Path для всех.

Это же про AllUsers речь?
SHGetPathFolder(0, CSIDL_COMMON_*, ...); ?
Re[2]: Получить Profile Path всех пользователей
От: -prus-  
Дата: 20.03.19 09:06
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>Это же про AllUsers речь?

CEM>SHGetPathFolder(0, CSIDL_COMMON_*, ...); ?

Не. Папки, которые для каждого user'a. Типа есть "Петя" и "Вася" и мне нужно получить C:\Users\Петя и C:\Users\Вася. Или я чего не понял?
С уважением,
Евгений
Re[3]: Получить Profile Path всех пользователей
От: qaz77  
Дата: 20.03.19 10:29
Оценка:
Здравствуйте, -prus-, Вы писали:
P>Не. Папки, которые для каждого user'a. Типа есть "Петя" и "Вася" и мне нужно получить C:\Users\Петя и C:\Users\Вася. Или я чего не понял?

Можно просто перечислить папки в C:\Users, игнорируя symlink и junction.
Настоящие папки там только для настоящих пользователей и Default — шаблон для новых.

Только следует иметь в виду, что имя папки может состоять только из имени пользователя, а может из имени плюс имя компьютера.
На серверных операционках папка может называться как-то так: "Вася.WinServ-123244".
Re[4]: Получить Profile Path всех пользователей
От: -prus-  
Дата: 20.03.19 15:40
Оценка:
Здравствуйте, qaz77, Вы писали:

Q>Можно просто перечислить папки в C:\Users, игнорируя symlink и junction.

Q>Настоящие папки там только для настоящих пользователей и Default — шаблон для новых.

Хотелось бы как-то более универсально чтоль, т.к. системный диск может быть и не C: и папки могут быть расположены на других томах
С уважением,
Евгений
Re[5]: Получить Profile Path всех пользователей
От: qaz77  
Дата: 21.03.19 12:48
Оценка: 2 (1)
Здравствуйте, -prus-, Вы писали:
P>Хотелось бы как-то более универсально чтоль, т.к. системный диск может быть и не C: и папки могут быть расположены на других томах

SHGetPathFolder с CSIDL_PROFILE дает путь к текущему профилю.
На один уровень вверх — и получаем C:\Users или аналог.
Перемещение профиля двигает на другие тома только "Документы", "Видео" и т.п., а также Temp.
AppData, Desktop и куча всего еще остается в стандартной папке юзера.
Re[6]: Получить Profile Path всех пользователей
От: -prus-  
Дата: 21.03.19 17:23
Оценка:
Здравствуйте, qaz77, Вы писали:

Q>SHGetPathFolder с CSIDL_PROFILE дает путь к текущему профилю.

Q>На один уровень вверх — и получаем C:\Users или аналог.
Q>Перемещение профиля двигает на другие тома только "Документы", "Видео" и т.п., а также Temp.
Q>AppData, Desktop и куча всего еще остается в стандартной папке юзера.

Как тогда быть с ситуацией, когда пользователя можно переименовать с "Вася" на "Хрюндель" в панели управления, а папка-то его останется C:\Users\Вася? И когда я буду перечислять все в C:\Users\*, то там будет "Вася" все равно
С уважением,
Евгений
Re[7]: Получить Profile Path всех пользователей
От: qaz77  
Дата: 22.03.19 07:05
Оценка:
Здравствуйте, -prus-, Вы писали:
P>Как тогда быть с ситуацией, когда пользователя можно переименовать с "Вася" на "Хрюндель" в панели управления, а папка-то его останется C:\Users\Вася? И когда я буду перечислять все в C:\Users\*, то там будет "Вася" все равно

Про переименования не знаю.
У виндовой учетки есть инвариантный идентификатор "S-...-...".
Где-то для него должны хранится и текущий логин, и папка профиля.

У меня была задача деплоить файлы для всех существующих и добавляемых в будущем пользователей.
Поэтому я просто перебирал папки и копировал туда нужные файлы (это из инсталятора с админскими правами),
в Default тоже — для пользователей, которых добавят в будущем.
Re[6]: Получить Profile Path всех пользователей
От: Mystic Artifact  
Дата: 07.04.19 13:21
Оценка: +1
Здравствуйте, qaz77, Вы писали:

Я могу переместить свой профиль в любое место на диске штатными средствами OS. Т.е. родительский каталог от пути к профилю — это строго не папка с пользователями, а лишь частный случай, хоть и дефолтный. Ну и про переименование уже сказали. Так, что все таки лучше на такие технологии не рассчитывать... или хотя бы проверять потом, что найденные потом подкаталоги действительно похожи на профили.
Re[7]: Получить Profile Path всех пользователей
От: qaz77  
Дата: 08.04.19 08:44
Оценка:
Здравствуйте, Mystic Artifact, Вы писали:
MA>Я могу переместить свой профиль в любое место на диске штатными средствами OS.

Как переместить весь профиль целиком?
В проводнике страничка "Расположение" есть только для подпапок профиля (Документы и др.)
Re[8]: Получить Profile Path всех пользователей
От: Mystic Artifact  
Дата: 08.04.19 16:21
Оценка: 5 (2)
Здравствуйте, qaz77, Вы писали:

Q>Здравствуйте, Mystic Artifact, Вы писали:

MA>>Я могу переместить свой профиль в любое место на диске штатными средствами OS.
Q>Как переместить весь профиль целиком?
Q>В проводнике страничка "Расположение" есть только для подпапок профиля (Документы и др.)
Со штатными средствами я наверное загнул... Хотя мне кажется в NT4 или 2000 это было...
Так или иначе я сам периодически у себя такое делаю.

Путь к профилю пользователя находится по пути в реестре:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-...\ProfileImagePath
. Это кстати и есть ответ на вопрос ТС.

Для того что-бы переместить профиль необходимо (выполнять из другого аккаунта):
1) изменить путь профиля в реестре
2) переместить все файлы
3) правильно настроить права доступа
4) перезагрузится (!) logon/logoff тут не поможет

К сожалению, есть ещё некоторые гении софтостроения, которые не знают о существовании %USERPROFILE%, и умудряются писать в
C:\Users\user_profile\IntelGraphicsProfiles\...
, ну и местами от МС тоже такое встречается.
Отредактировано 08.04.2019 16:26 Mystic Artifact . Предыдущая версия . Еще …
Отредактировано 08.04.2019 16:24 Mystic Artifact . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.