Вопрос

Я ищу хороший способ получить локальную папку данных приложения для конкретного пользователя - без необходимости вводить данные для входа для этого пользователя.

SHGetFolderPath() Путь к папке() могу принять токен доступа для любого пользователя, для которого я хочу получить локальную папку appdata, но чтобы получить токен доступа, вы должны предоставить пароль пользователя.Кроме того, согласно Документы это не поддерживается на <= Windows 2000.

Раздел реестра HKCU\Программное обеспечение\Microsoft\ Windows\CurrentVersion\Проводник\ Папка оболочки содержит значение AppData, которое содержит местоположение локальной папки appdata для текущего пользователя...таким образом, я мог бы технически смонтировать HKCU hive для конкретного пользователя и получить доступ к этому значению;однако Microsoft, похоже, настоятельно не рекомендует использовать этот ключ, и я слышал, что иногда он также может быть неточным.

По иронии судьбы, в Windows учетная запись администратора может легко получить доступ ко всем данным в папке appdata любого пользователя и изменять их, если он просто откроет Проводник и перейдет в нужное место...но, похоже, не существует простого способа программно получить местоположение папки appdata для конкретного пользователя.

Итак, есть ли у меня какие-либо другие варианты?Прямо сейчас доступ к реестру (gasp) кажется лучшим вариантом, но я бы хотел использовать что-нибудь официальное, не запрещенное Microsoft, если это возможно.

Будем признательны за любые предложения.

Это было полезно?

Решение

Не существует документированного способа сделать это без токена AFAIK, но лучше всего сделать это:

  1. Найдите профиль:HKLM\ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Microsoft\ Windows NT\CurrentVersion\Список профилей (%windir%\Profiles на Win9x)
  2. Настройте привилегии для SE_RESTORE_NAME
  3. RegLoadKey NTUSER.DAT (ПОЛЬЗОВАТЕЛЬ.DAT в 9x)
  4. Запрос ...\CurrentVersion\Explorer\Папки оболочки пользователя

Обратите внимание, что правильный раздел реестра для проверки - это Пользовательские папки оболочки, а не папки оболочки (и вам, возможно, придется расширить путь), см. Долгая и печальная история ключа Shell Folders для получения подробной информации

Я также хочу отметить, что, если возможно, вам следует хранить данные в programfiles или общих папках, а затем копировать в профиль при первом запуске вашей программы для каждого пользователя

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top