记录在pragram Files 下的程序更新,但是权限不够
实际业务中,我们可能会遇到我们的安装包将程序安装在C盘Program Files
目录下后,有些文件要修改或者新增会导致拒绝访问
的异常
要解决以上问题,我们有两种方式:
- 直接给定文件或文件夹,设置权限
- 安装的时候,将需要进行写操作的文件或者文件夹赋予足够的控制权限
只需要添加EveryOne
用户,并勾选完全控制
,保存即可(也可以添加Users设置为完全控制)。
这种方法比较简单,我们不过多解说。主要看下我们如何通过软件代码的方式来使之生效。
具体实现如下:
/// <summary> ///为文件夹添加users,everyone用户组的完全控制权限 /// </summary> /// <param name="dirPath"></param> static bool AddSecurityControll2Folder(string dirPath) { try { //获取文件夹信息 DirectoryInfo dir = new DirectoryInfo(dirPath); //获得该文件夹的所有访问权限 DirectorySecurity dirSecurity = dir.GetAccessControl(AccessControlSections.All); //设定文件ACL继承 InheritanceFlags inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; //添加ereryone用户组的访问权限规则 完全控制权限 FileSystemAccessRule 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 isModified); //dirSecurity.ModifyAccessRule(AccessControlModification.Add, usersFileSystemAccessRule, out bool isModified); //设置访问权限 dir.SetAccessControl(dirSecurity); return isModified; } catch (Exception) { return false; } }