首页 > 编程语言 >C# 如何给文件夹赋予权限,以解决权限不足问题

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

时间:2024-10-31 14:45:53浏览次数:8  
标签:dirSecurity C# 用户组 应用程序 Environment 文件夹 权限

专注于.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技术开发的博主,关注我个人微信公众号查看更多:承哥技术交流小作坊。

标签:dirSecurity,C#,用户组,应用程序,Environment,文件夹,权限
From: https://blog.csdn.net/qq_22933729/article/details/143356336

相关文章

  • Cookie和Session
    Cookie存储位置:Cookie是存储在客户端(浏览器)中的小文本文件。每当用户访问网站时,浏览器会将这些Cookie发送给服务器。生命周期:Cookie可以设置过期时间。它们可以是会话Cookie(当浏览器关闭时失效)或持久Cookie(在设定的过期时间之前有效)。容量限制:每个Cookie的大......
  • mybatis---回顾jdbc
    回顾JDBC使用IDEA创建maven工程打开IDEA,选择CreateNewProject,点击Maven,如下:点击Next,填写Maven工程信息,如下:GroupId:com.mybatisArtifactId:MyBatisAppVersion:1.0-SNAPSHOT点击创建按钮,即Maven工程就创建好了引入mysql依赖包在Maven工程的pom.xml文件中导入......
  • 利用classfinal-maven-plugin对jar进行加密,防止反编译
    背景:将jar包部署到其他服务器,如何保证自己的jar不会被反编译解密一、如何打包成加密的jar1、在pom文件中,添加这两项A、<dependency><groupId>net.roseboy</groupId><artifactId>classfinal-maven-plugin</artifactId><version>1.2.1<......
  • rabbitmq - ack机制
    疑问:在写demo的时候,如果client被强制中断,消息来不及处理,这时候消息又出队列了,这样不是会产生严重的问题嘛?一个会话中,可以同时处理一批数据,如果一条失败了,之前的也要求回滚的话,要怎么处理?获取一个消息之后,发现程序无法处理这条消息,想要退还回去,该怎么办?方案:这就涉及到队......
  • TYPE-C PD浅谈(三)
    由于TYPE-C两头都一样,没有方向性,所以在对接前并不会有电源输出,数据主从也尚未定义。在PD的规范内,针对装置对接,定义了三个电阻来进行对接的识别。Rp:做为Provider需要在CC脚位上上拉一个Rp电阻。Rp电阻允许有三种阻值(pullhigh5V时,10K/22K/56K),这三种阻值也同时初步的宣告了Provid......
  • POLIR-Society-Organization-Politics: “How”-政治的: Versatility+历史+应然+实然:
    组织行为学案例:政治+经济的博弈+投资欧盟......
  • ElevenLabs Voice Design:文本生成个性化语音;科学家用 AI 解读猪叫声背后情绪和压力丨R
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • Go 语言的Channel
    在Go语言中,Channel是一种用于在多个Goroutine之间传递数据的通信机制。Channel提供了类型安全、同步的数据传输方式,使Goroutine可以相互通信而无需使用锁。1.Channel的定义与声明在Go中,可以使用make函数创建Channel,并指定Channel中传输的数据类型:ch:=make(......
  • TCP和UDP
    TCP(传输控制协议)连接导向:在数据传输之前,TCP需要建立连接(如三次握手),确保双方可以通信。可靠性:TCP提供数据传输的可靠性,确保数据包按顺序到达,且没有丢失。丢失的数据包会被重传。流量控制和拥塞控制:TCP具有流量控制机制,防止发送方过快发送数据,导致接收方处理不过来。同时,它也会根......
  • CF833B The Bakery
    CF833BTheBakery题意将长度为\(n\)的序列分为恰好\(k\)段,每段的权值和定义为出现的\(a[i]\)的种类,请最大化每一段的权值总和。朴素dp记\(f[i][j]\)表示\(1\simi\),被分成\(j\)段,最大权值和。有转移:\[f[i][j]=\max_{1\lek\lti}f[k][j-1]+val(k+1,i......