2012-01-06 13 views
5

¿Cómo obtener la ruta de la carpeta Usuarios desde el servicio de Windows en MS Vista? Pienso en la ruta del directorio C: \ Users, pero puede ser una ubicación diferente, depende de la localización del sistema.Obtención de la ruta del directorio de usuarios

+0

¿Desea la ruta particular de inicio para un usuario en particular? No hay garantía de que todos los usuarios tengan sus carpetas de inicio en la misma ubicación. (Carpetas hogareñas remotas, por ejemplo). –

Respuesta

11

Eche un vistazo a Environment.SpecialFolder Enumeration, p.

Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory); 

Ajuste para la carpeta especial que desee. Sin embargo, al leer otra publicación encontrada here, parece que puede necesitar hacer una pequeña manipulación de la cadena si quiere exactamente c: \ users en lugar de c: \ users \ public, por ejemplo.

7

System.Environment.SpecialFolder le dará acceso a todas estas carpetas que desee, como Mis documentos, etc ..

Si utiliza el PerfilUsuario SpecialFolder, que debe darle la ruta a su perfil bajo Usuarios.

string userPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); 
0

System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal)

1

no puedo ver que la función expuesta a .NET, pero en C (++) sería

SHGetKnownFolderPath(FOLDERID_UserProfiles, ...) 
2

La mejor manera que @Neil señaló es usar SHGetKnownFolderPath() con el FOLDERID_UserProfiles. Sin embargo, C# no tiene eso. Pero, no es tan difícil invocarlo:

using System; 
using System.Runtime.InteropServices; 

namespace SOExample 
{ 
    public class Main 
    { 
     [DllImport("shell32.dll")] 
     static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid rfid, uint dwFlags, IntPtr hToken, out IntPtr pszPath); 

     private static string getUserProfilesPath() 
     { 
      // https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx#folderid_userprofiles 
      Guid UserProfilesGuid = new Guid("0762D272-C50A-4BB0-A382-697DCD729B80"); 
      IntPtr pPath; 
      SHGetKnownFolderPath(UserProfilesGuid, 0, IntPtr.Zero, out pPath); 

      string path = System.Runtime.InteropServices.Marshal.PtrToStringUni(pPath); 
      System.Runtime.InteropServices.Marshal.FreeCoTaskMem(pPath); 
      return path; 
     } 

     static void Main(string[] args) 
     { 
      string path = getUserProfilesPath(); // C:\Users 
     } 
    } 
} 
Cuestiones relacionadas