2012-06-26 12 views
16

sto cerco di ottenere il percorso della cartella C:\Users\<username>\AppData\Local utilizzandoGet appdata percorso della cartella locale in C servizio # Windows

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

in un servizio di Windows C#, ma restituisce qualche altro percorso

C:\Windows\ServiceProfiles\LocalService\AppData\Local 

Se uno qualsiasi hai qualche idea su come farlo correttamente?

+0

non è venuto in mente quando si distribuisce la vostra applicazione? – Rozuur

+9

È normale, poiché il servizio viene eseguito con l'account 'Local System'. –

+4

Ho portato via il set di qualcuno (senza commenti) - sembra una domanda ragionevole per me e una trappola in cui molti potrebbero cadere. – Wolf5370

risposta

7

Stai eseguendo il servizio con un account utente? In caso contrario, il servizio utilizzerà il proprio profilo come si vede. Se questo servizio è "connesso" da un utente, è possibile passare la cartella al servizio e ignorare il controllo locale. Altrimenti, prova a eseguire il servizio con un account utente (o creane un account).

+0

Permettimi di cambiare la domanda, voglio ottenere questo percorso "C: \ Users \ username \ AppData \ Local", quindi quale "ServiceAccount" dovrei usare per questo? o come otterrò questo percorso nel servizio Windows C#. –

+0

Quando dici "username" intendi la cartella di un vero utente o vuoi solo una cartella per la tua applicazione? Come ha detto Coon nei suoi commenti, se si desidera che un utente specifico non sia collegato attivamente e trasmetta tali informazioni, si tratta di un rischio per la sicurezza e in quanto tale sarà un problema. Il Coon e io sono entrambi corretti in ciò che diciamo, ma stiamo rispondendo a domande diverse, quindi è necessario specificare come viene utilizzato il servizio e quale accesso desidera. Allora forse possiamo andare oltre. Il nome utente – Wolf5370

+0

è l'utente corrente che ha effettuato l'accesso. –

3

La cartella AppData per ciascun utente è memorizzata nel registro.

utilizzando questo percorso:

const string regKeyFolders = @"HKEY_USERS\<SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"; 
const string regValueAppData = @"AppData"; 

Data una stringa SID variabile che contiene il SID degli utenti, è possibile ottenere il loro percorso AppData in questo modo:

string path=Registry.GetValue(regKeyFolders.Replace("<SID>", sid), regValueAppData, null) as string; 
Problemi correlati