SHGetFolderPath () para um utilizador específico
-
21-08-2019 - |
Pergunta
Eu estou procurando uma boa maneira de obter a pasta de dados de aplicativo local para um usuário específico -. Sem ter de introduzir os detalhes de login para esse usuário
SHGetFolderPath () pode aceitar um token de acesso por qualquer usuário que deseja obter a pasta AppData local para, mas para obter um token de acesso, você tem que fornecer a senha do usuário. Além disso, de acordo com a docs este isn' t suportado em <= Windows 2000.
A chave de registro HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Pasta ??i> contém o valor AppData, que contém a localização da pasta AppData local para o usuário atual ... então eu poderia tecnicamente montar a colméia HKCU para o usuário específico e acesso este valor; No entanto, a Microsoft parece desencorajar fortemente o uso desta chave, e eu ouvi que ele pode ocasionalmente ser imprecisa também.
Ironicamente, no Windows, uma conta de administrador pode facilmente acessar e modificar todos os dados na pasta AppData de qualquer usuário, se eles simplesmente abrir Explorer e navegue para o local correto ... mas não parece ser um maneira fácil de programaticamente obter a localização da pasta AppData para um usuário específico.
Assim que eu tenho outras opções? Agora, ao acessar o registro (suspiro) parece ser a melhor opção, mas eu gostaria de usar algo oficial e não desencorajada pela Microsoft, se possível.
Todas as sugestões serão apreciadas.
Solução
Não há nenhuma maneira documentada para fazer isso sem o AFAIK forma, mas sua melhor aposta é a seguinte:
- Localize o perfil: HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList (% windir% \ Profiles no Win9x)
- AdjustTokenPrivileges para
SE_RESTORE_NAME
- RegLoadKey NTUSER.DAT (USER.DAT em 9x)
- Consulta ... \ CurrentVersion \ Explorer \ User Shell Folders
Note que a chave de registro correto para verificação é User Shell Folders e não Shell Folders (E você pode ter que expandir o caminho), consulte a história longa e triste do chave Shell pastas para mais detalhes
Também quero salientar que, se possível, você deve armazenar os dados em programfiles ou as pastas comuns e, em seguida, copiar para o perfil quando o programa é executado pela primeira vez para cada usuário