2012-06-26 8 views
16

estoy trato de obtener la ruta C:\Users\<username>\AppData\Local carpeta medianteObtener ruta de carpeta local Datos de programa en C de Servicio # ventanas

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

en un servicio de Windows en C#, pero vuelve alguna otra ruta

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

¿Algo ¿Tienes alguna idea de cómo hacerlo correctamente?

+0

qué se produce al implementar su aplicación? – Rozuur

+9

Es normal, ya que su servicio se ejecuta bajo la cuenta 'Sistema local'. –

+4

Quitó el -1 alguien estableció (sin comentarios) - parece una pregunta razonable para mí y una trampa en la que muchos podrían caer. – Wolf5370

Respuesta

7

¿Está ejecutando el servicio con una cuenta de usuario? De lo contrario, el servicio usará su propio perfil como puede ver. Si este servicio está "conectado" por un usuario, entonces podría pasar la carpeta al servicio y eludir la comprobación local. De lo contrario, intente ejecutar el servicio en una cuenta de usuario (o cree una cuenta para él).

+0

Permítanme cambiar la pregunta, quiero obtener esta ruta "C: \ Users \ username \ AppData \ Local", entonces ¿qué "ServiceAccount" debería usar para esto? o cómo obtendré esta ruta en el servicio de Windows C#. –

+0

Cuando dices "nombre de usuario" ¿te refieres a la carpeta de un usuario real o simplemente quieres una carpeta para tu aplicación? Como dijo Coon en sus comentarios, si desea que un usuario específico sin que estén iniciando sesión activamente y transmitiendo esa información, entonces es un riesgo de seguridad y, como tal, será un problema. El Coon y yo tenemos razón en lo que decimos, pero estamos respondiendo preguntas diferentes, por lo que debe especificar cómo se usa su servicio y qué acceso quiere. Entonces tal vez podamos hep más. – Wolf5370

+0

nombre de usuario es el usuario actual que inició sesión. –

3

La carpeta AppData para cada usuario se almacena en el registro.

Usando esta ruta:

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

Dada una cadena SID variable que contiene el SID usuarios, puede obtener su camino AppData así:

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