Obtaining path of users directory

前端 未结 5 650
小蘑菇
小蘑菇 2021-01-18 18:43

How to get path of Users folder from windows service on MS Vista? I think about path of C:\\Users directory, but it may be different location depend on sys

5条回答
  •  不思量自难忘°
    2021-01-18 18:55

    The best way as @Neil pointed out is to use SHGetKnownFolderPath() with the FOLDERID_UserProfiles. However, c# doesn't have that. But, it's not that hard to invoke it:

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

提交回复
热议问题