Я ищу хороший способ получить локальную папку данных приложения для конкретного пользователя - без необходимости вводить данные для входа этого пользователя.SHGetFolderPath() для конкретного пользователя
SHGetFolderPath() может принимать токен доступа для любого пользователя, которому я хочу получить локальную папку appdata, но чтобы получить токен доступа, вы должны предоставить пароль пользователя. Кроме того, в соответствии с docs это не поддерживается на < = Windows 2000.
ключ реестра HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folder содержит значение AppData, который содержит местоположение локальная папка appdata для текущего пользователя ... поэтому я могу технически смонтировать улей HKCU для конкретного пользователя и получить доступ к этому значению; однако Microsoft, похоже, сильно препятствует использованию этого ключа, и я слышал, что он иногда может быть неточным.
По иронии судьбы, в Windows учетная запись администратора может легко получить доступ и изменить все данные в папке appdata любого пользователя, если они просто откроют проводник и перейдут в нужное место ... но, похоже, нет простой способ программно получить местоположение папки appdata для конкретного пользователя.
У меня есть другие варианты? Прямо сейчас доступ к реестру (вздоху) кажется лучшим вариантом, но я бы хотел использовать что-то официальное и не обескураживать Microsoft, если это возможно.
Любые предложения будут оценены.
Awesome. Я видел функцию RegLoadKey() и считал, что использую ее ... но в то время я не был уверен, что сможет сделать то, что я хотел, не будучи смехотворно медленным и ненадежным. Тем не менее, ваш ответ дал мне вдохновение, чтобы попробовать. Похоже, я могу сделать эту работу ... это не так медленно, как я думал. Надеемся, что это будет работать без заминки для клиента, который хочет эту функцию. У них много компьютеров, использующих службы AD/Terminal и, вероятно, перемещающиеся профили пользователей. RegConnectRegistry() может пригодиться позже. – beepboopbopbop
Если скорость RegLoadKey является проблемой, возможно, вы можете посмотреть в HKEY_USERS для SID пользователя, что спасет вас вызов RegLoadKey, но он работает только для уже загруженных профилей. – Anders