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 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.

Foi útil?

Solução

Não há nenhuma maneira documentada para fazer isso sem o AFAIK forma, mas sua melhor aposta é a seguinte:

  1. Localize o perfil: HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList (% windir% \ Profiles no Win9x)
  2. AdjustTokenPrivileges para SE_RESTORE_NAME
  3. RegLoadKey NTUSER.DAT (USER.DAT em 9x)
  4. 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top