C# 无需管理员权限提示,操作C盘文件 您所在的位置:网站首页 如何获取系统权限删除c盘文件 C# 无需管理员权限提示,操作C盘文件

C# 无需管理员权限提示,操作C盘文件

#C# 无需管理员权限提示,操作C盘文件| 来源: 网络整理| 查看: 265

在C盘创建、移动文件,如果当前不是管理员身份,是没办法直接操作。

如果当前程序有管理员权限,那可以直接操作。

但是,添加管理员权限启动,会弹出用户确认提示框。

在某些场景下,其实是不想让用户看到这样的确认框,会影响用户体验。本文来讲下如何获取权限默默的对C盘进行操作~

对文件/文件夹添加权限控制

我们创建一个应用程序SetFileAccessControlDemo,用于添加权限。

添加应用程序项目后,在app.manifest中添加管理员权限。

注:管理员权限,添加方式见链接 C# 程序管理员权限启动 - 唐宋元明清2188 - 博客园 (cnblogs.com)

添加权限后,我们对C盘下的文件夹,添加权限控制:

1 public partial class App : Application 2 { 3 public App() 4 { 5 AddSecurity(@"C:\Program Files (x86)\Test"); 6 Environment.Exit(0); 7 } 8 /// 9 ///为文件夹添加users,everyone用户组的完全控制权限 10 /// 11 /// 12 void AddSecurity(string dirPath) 13 { 14 //获取文件夹信息 15 var dir = new DirectoryInfo(dirPath); 16 //获得该文件夹的所有访问权限 17 var dirSecurity = dir.GetAccessControl(AccessControlSections.All); 18 //设定文件ACL继承 19 var inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; 20 //添加ereryone用户组的访问权限规则 完全控制权限 21 var everyoneFileSystemAccessRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow); 22 //添加Users用户组的访问权限规则 完全控制权限 23 var usersFileSystemAccessRule = new FileSystemAccessRule("Users", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow); 24 dirSecurity.ModifyAccessRule(AccessControlModification.Add, everyoneFileSystemAccessRule, out var isModified); 25 dirSecurity.ModifyAccessRule(AccessControlModification.Add, usersFileSystemAccessRule, out isModified); 26 //设置访问权限 27 dir.SetAccessControl(dirSecurity); 28 } 29 }

这里是添加的所有Users,如果只想添加当前用户,可以设置identity:WindowsIdentity.GetCurrent().Name

安装包安装过程中执行exe

下面是innosetup安装试的处理,添加以下SetFileAccessControlDemo.exe的执行.

1 [Run] 2 Filename: "{app}\SetFileAccessControlDemo.exe"; StatusMsg: "Add full access control to folder"; Check: IsWin64(); Flags: skipifsilent

当然,安装包自身需要以管理员运行,设置如下:

下载Resource Hacker编译器,在InnoSetup安装目录下找到配置SetupLdr.e32文件,设置Manifest中的权限启动参数(与VisualStudio类似)。

详细操作可参考:用inno setup制作管理员权限启动的安装包

设置完成后,生成安装包。安装包会在安装过程完成前,会默默的执行上面的SetAdminitorstorPermissionDemo.exe。权限设置结果如下:

其它方案

设置文件夹控制权限原理就是,当前程序没有管理员权限的话,那就另加个有权限的程序去操作就行了。 

所以如果不想在安装包中设置,也可以在主程序中调用上面的SetFileAccessControlDemo.exe。

1 public App() 2 { 3 if (IsAdministrator()) 4 { 5 try 6 { 7 AddSecurity(@"C:\Program Files (x86)\Test"); 8 } 9 catch (Exception exception) 10 { 11 MessageBox.Show(exception.Message); 12 } 13 this.Startup += App_Startup; 14 } 15 else 16 { 17 Process.Start(@"D:\SetFileAccessControlDemo.exe"); 19 Environment.Exit(0); 20     } 21   } 判断当前是否有管理员操作权限,如果没有则启动另一个SetFileAccessControlDemo.exe去设置文件夹权限,并退出当前exe。 SetFileAccessControlDemo.exe设置完权限后,启动原有exe,并退出自身进程。 经过这样的流程,权限就设置完成了。 IsAdministrator: 1 public static bool IsAdministrator() 2 { 3 WindowsIdentity identity = WindowsIdentity.GetCurrent(); 4 WindowsPrincipal principal = new WindowsPrincipal(identity); 5 return principal.IsInRole(WindowsBuiltInRole.Administrator); 6 } View Code

 

博客参考:

C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限 - wolfy - 博客园 (cnblogs.com) (19条消息) 用inno setup制作管理员权限启动的安装包_一朵花开的时间-CSDN博客_inno setup 管理员权限 Inno Setup 在安装过程中启动可执行文件(安装驱动程序) - 一杯清酒邀明月 - 博客园 (cnblogs.com)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有