设置文件夹可操作权限

赋予当前用户可操作指定文件夹的权限


   相信很多人都会讨厌Windows下获取管理员权限时弹出的对话框提醒吧。大部分软件是不需要管理员权限的,但是因为系统盘文件权限的问题,不得不使用管理员权限。如果你也遇到了相同的情况,并且也不想看到管理员权限的提醒框,那就看一下解决方案吧。

情况:系统盘里的某些文件修改,需要管理权限。安装在C盘下的程序升级时,可能也会遇到权限不足的情况。

如果你的程序中还有其他的操作,必须要以管理员运行的,最好把这些操作的代码写到单独的EXE中,以管理员身份启动这些EXE,而不是每次启动主程序时都弹需要管理员权限的对话框,这样用户体验就太差了、太差了、太差了。

       好吧,废话到此为止。

       .net  framework框架中,的文件安全性操作、例如DirectorySecurity、FileSecurity、FileSystemAccessRule等去管理文件夹或者文件权限时,需要考虑很多,不是管理员身份去操作容易失败,win7、win10下权限规则差距等,简而言之,不太好用。下面我说一个简单又不耽误工夫的方法,就是使用cacls(没使用过的自行google或者msdn,不多说,使用很简单)。

    假如我希望我当前windows用户启动的程序想要具有对某些文件夹的全部控制权,就可以这么写。

  

     

Task.Run(() =>
            {
                Process process = new Process();
                process.StartInfo.FileName = "cacls.exe";
                process.StartInfo.Arguments = " " + dirPath + " " + " /t " + " /g " + @Environment.UserName + ":" + "f";
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.RedirectStandardInput = true;
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.RedirectStandardError = true;
                process.StartInfo.CreateNoWindow = true;

                process.Start();
                process.StandardInput.WriteLine("y");
                string strOutput = process.StandardOutput.ReadToEnd();
                Console.WriteLine(strOutput);
                process.WaitForExit();
                process.Close();
            });


很简单就获取了对指定文件夹里所有文件的所有权。


昨天没有写完,今天继续。继续权限的问题(VirtualStore)。

环境:程序安装在系统盘,配置文件在安装目录下。此时,程序运行时(不以管理员身份运行),读取配置文件(或者其他resource文件),文件(包括文件夹)会被首先复制到VirtualStore,读取和修改的文件其实都会在VirtualStore中,并且你程序运行的当前路径也会是在VirtualStore对应的目录下。

那么问题出现了。如果你有一个自动更新的程序,需要更新配置文件,如果只是覆盖安装目录下的文件,在程序启动后,读取的文件则依旧是VirtualStore的旧版本配置文件。


简单的解决方法:一般再说,你的升级程序是需要管理员身份运行的,在你读取升级信息时,应该包含了是否需要删除旧的配置文件的情况,删除文件的操作也在升级exe中进行,防止权限不足,删除失败。


希望对遇到相同问题的朋友有帮助

        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值