C# 如何给文件夹赋予权限,以解决权限不足问题

专注于.NET技术开发的博主,关注我个人微信公众号查看更多:承哥技术交流小作坊。

我们知道,windows操作系统系统盘的权限控制是比其它磁盘更严格的。我们应用程序如果想在C盘下进行文件读写,大部分需要管理员权限才行(像AppData,ProgramData这种目录除外)。

补充说明:

AppData:通常用于存放应用程序数据,该文件夹不存在权限问题,但绑定到当前用户。获取方法如下:

​Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);​

ProgramData:通常用于存放应用程序数据,该文件夹不存在权限问题,本机用户均可以访问。获取方法如下:

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);

如果你的应用程序必须在安装目录下进行数据的读写,同时用户权限并不是管理员,我们该怎么办?

能想到的办法当然很简单,没有权限就给它赋予权限呗!

先来看一段代码:

        /// <summary>
        ///为文件夹添加users,everyone用户组的完全控制权限
        /// </summary>
        /// <param name="dirPath"></param>
        public static bool AddSecurityControll2Folder(DirectoryInfo dir)
        {
            try
            {
                //获得该文件夹的所有访问权限
                var dirSecurity = dir.GetAccessControl(AccessControlSections.All);

                //设定文件ACL继承
                var inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;

                //添加ereryone用户组的访问权限规则 完全控制权限
                var everyoneFileSystemAccessRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);

                //添加Users用户组的访问权限规则 完全控制权限
                FileSystemAccessRule usersFileSystemAccessRule = new FileSystemAccessRule("Users", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);

                dirSecurity.ModifyAccessRule(AccessControlModification.Add, everyoneFileSystemAccessRule, out bool isEveryoneModified);

                dirSecurity.ModifyAccessRule(AccessControlModification.Add, usersFileSystemAccessRule, out bool isUsersModified);

                //设置访问权限
                dir.SetAccessControl(dirSecurity);

                return isEveryoneModified && isUsersModified;
            }
            catch (Exception)
            {
                return false;
            }
        }

以上代码就可以用来修改文件夹的权限。

但是,我们的软件不是以管理员权限运行的话,此处的代码执行根本就没有用啊!在忽悠我么?

那是当然,如果不是管理员就能正常执行,这才奇怪了不是?那还要权限干嘛呢?

所以解决方法,我们只需要将修改文件夹权限的时机做个修改,我们放到安装的时候再执行就好了。

至于大家用什么方式打安装包,就用那种方式打,把权限控制的逻辑写进去就可以了。

专注于.NET技术开发的博主,关注我个人微信公众号查看更多:承哥技术交流小作坊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷眼Σ(-᷅_-᷄๑)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值