• C# 根据注册表获取当前用户的常用目录整理


    1.使用C#获取当前程序或解决方案的路径

    2.使用C#获取当前登录用户的相关目录

    3.也可以获取当前系统通用目录

    4.获取Windows系统的目录,从注册表中获取。

    一、当前用户的目录,HKEY_Current_User

    二、系统通用目录,当前机器,Hkey_Local_Machine

    三、代码实例

     class LocalPathHelper
        {
            //windows当前用户的注册表键
            private static RegistryKey folders;
    
            /// <summary>
            /// 全局指定当前获取注册表的根节点
            /// 一般只有管理员身份运行,才能操作Registry.LocalMachine 对应的文件
            /// </summary>
            public static RegistryKey RootKey { get; set; }
            static LocalPathHelper()
            {
                SetAsCurrentUser();
            }
            /// <summary>
            /// 设置根节点为LocalMachine
            /// </summary>
            public static void SetAsLocalMachine()
            {
                RootKey = Registry.LocalMachine;
                folders = OpenRegistryKey(Registry.LocalMachine, @"/software/microsoft/windows/currentversion/explorer/shell folders");
            }
            /// <summary>
            /// 设置根节点为LocalMachine
            /// </summary>
            public static void SetAsCurrentUser()
            {
                RootKey = Registry.CurrentUser;
                folders = OpenRegistryKey(Registry.CurrentUser, @"/software/microsoft/windows/currentversion/explorer/shell folders");
            }
    
            #region 当前用户路径
            /// <summary>
            /// windows用户字体目录路径
            /// </summary>
            public static string FontsPath
            {
                get { return GetPath("Fonts"); }
            }
            /// <summary>
            /// windows用户网络邻居路径
            /// </summary>
            public static string NetHoodPath
            {
                get { return GetPath("Nethood"); }
            }
            /// <summary>
            /// windows用户我的文档路径
            /// </summary>
            public static string PersonalPath
            {
                get { return GetPath("Personal"); }
            }
            /// <summary>
            /// windows用户最近访问文档快捷方式目录
            /// </summary>
            public static string RecentPath
            {
                get { return GetPath("Recent"); }
            }
            /// <summary>
            /// windows用户发送到目录路径
            /// </summary>
            public static string SendToPath
            {
                get { return GetPath("Sendto"); }
            }
            /// <summary>
            /// windows用户收藏夹目录路径
            /// </summary>
            public static string FavoritesPath
            {
                get { return GetPath("Favorites"); }
            }
            /// <summary>
            /// windows用户网页历史目录路径
            /// </summary>
            public static string HistoryPath
            {
                get { return GetPath("History"); }
            }
            /// <summary>
            /// windows用户cookies目录路径
            /// </summary>
            public static string CookiePath
            {
                get { return GetPath("Cookies"); }
            }
            /// <summary>
            /// windows用户Cache目录路径 
            /// </summary>
            public static string CachePath
            {
                get { return GetPath("Cache"); }
            }
            #endregion
    
            #region //系统路径
            /// <summary>
            /// widnows用户桌面路径
            /// </summary>
            public static string DesktopPath
            {
                get { return GetPath("Desktop"); }
            }
            /// <summary>
            /// windows用户开始菜单程序路径
            /// </summary>
            public static string ProgramsPath
            {
                get { return GetPath("Programs"); }
            }
            /// <summary>
            /// windows用户开始菜单目录路径
            /// </summary>
            public static string StartMenuPath
            {
                get { return GetPath("StartMenu"); }
            }
            /// <summary>
            /// windows用户开始菜单启动项目路径
            /// </summary>
            public static string StartupPath
            {
                get { return GetPath("Startup"); }
            }
            /// <summary>
            /// windows用户应用程序数据目录
            /// </summary>
            public static string AppdataPath
            {
                get { return GetPath("Appdata"); }
            }
            /// <summary>
            /// 公共文档
            /// </summary>
            public static string Documents
            {
                get { return GetPath("Documents"); }
            }
            #endregion
    
            /// <summary>
            /// 当前应用程序的工作目录,不是程序文件目录
            /// </summary>
            public static string CurrentProgramPath
            {
                get { return Directory.GetCurrentDirectory(); }
            }
            /// <summary>
            /// 当前应用程序解决方案路径
            /// </summary>
            public static string CurrentSolutionPath
            {
                get
                {
                    string program = CurrentProgramPath;
                    DirectoryInfo info = new DirectoryInfo(program);
                    return info.Parent.Parent.FullName;
                }
            }
    
            #region //私有方法
            /// <summary>
            /// 获取键值对应的文件夹
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            private static string GetPath(string key)
            {
                if (RootKey == Registry.LocalMachine)
                    key = "Common " + key;
                string path = folders.GetValue(key).ToString();
                if (!string.IsNullOrEmpty(path))
                {
                    if (Directory.Exists(path))
                    {
                        return path;
                    }
                }
                return "'" + key + "'对应的文件夹不存在";
            }
            //打开,指定根节点和路径的注册表项
            private static RegistryKey OpenRegistryKey(RegistryKey root, string str)
            {
                str = str.Remove(0, 1) + @"/";
                while (str.IndexOf(@"/") != -1)
                {
                    root = root.OpenSubKey(str.Substring(0, str.IndexOf(@"/")));
                    str = str.Remove(0, str.IndexOf(@"/") + 1);
                }
                return root;
            }
            #endregion
        }
    View Code

    更多:

    要将程序集“xxx.dll”标记为系统必备组件,必须对其进行强签名

    设置c#windows服务描述及允许服务与桌面交互的几种方法(转)

    Windows服务简单实例

  • 相关阅读:
    Kubernetes 系列(八):搭建EFK日志收集系统
    Kubernetes 系列(七):持久化存储StorageClass
    Kubernetes 系列(六):持久化存储 PV与PVC
    .Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker
    Ocelot自定义管道中间件
    生产环境项目问题记录系列(二):Docker打包镜像Nuget包因权限问题还原失败
    .Net Core 商城微服务项目系列(十四):分布式部署携程Apollo构建配置中心
    IT人该如何未雨绸缪,不断提升自己的竞争力?同时尽量避免风险?
    Session跟Cookie简单的理解
    软件测试中高级面试提问
  • 原文地址:https://www.cnblogs.com/tianma3798/p/6552716.html
Copyright © 2020-2023  润新知