Domanda

Sto cercando un buon modo per ottenere la cartella dei dati dell'applicazione locale per un utente specifico -. Senza dover inserire i dati di login per l'utente

SHGetFolderPath () può accettare un token di accesso per qualsiasi utente che voglio ottenere la cartella appdata locale, ma per ottenere un token di accesso, è necessario fornire la password dell'utente. Inoltre, secondo il docs questo isn' t supportato su <= Windows 2000.

La chiave di registro HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Cartella contiene il valore AppData, che contiene la posizione della cartella AppData locale per l'utente corrente ... così ho potrebbe tecnicamente montare l'alveare HKCU per l'utente specifico e accedere a questo valore; tuttavia, Microsoft sembra scoraggiare fortemente l'uso di questa chiave, e ho sentito che può a volte essere impreciso pure.

Per ironia della sorte, su Windows, un account di amministratore può facilmente accedere e modificare tutti i dati nella cartella appdata di qualsiasi utente, se solo si aprono Explorer e individuare la posizione corretta ... ma ci non sembra essere un modo semplice per ottenere a livello di codice la posizione della cartella AppData per un utente specifico.

Quindi devo tutte le altre opzioni? In questo momento, l'accesso al Registro (gasp) sembra l'opzione migliore, ma mi piacerebbe usare qualcosa di ufficiale e non scoraggiato da Microsoft, se possibile.

Tutti i suggerimenti sarebbero apprezzati.

È stato utile?

Soluzione

Non c'è modo documentato per fare questo senza il token per quanto ne so, ma la soluzione migliore è quella di:

  1. Trova il profilo: HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList (% windir% \ Profiles su Win9x)
  2. AdjustTokenPrivileges per SE_RESTORE_NAME
  3. RegLoadKey NTUSER.DAT (USER.DAT su 9x)
  4. Domanda ... \ CurrentVersion \ Explorer \ User Shell Folders

Si noti che la chiave corretta Registro di sistema per controllare è User Shell Folders e non Shell Folders (E potrebbe essere necessario espandere il percorso), vedere la lunga e triste storia della chiave Shell Folders per i dettagli

Voglio anche sottolineare che, se possibile, è necessario memorizzare i dati in programfiles o le cartelle comuni e quindi copiare nel profilo quando il programma viene eseguito per la prima volta per ogni utente

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top