C# 无需管理员权限提示,操作C盘文件
在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 /// <summary>
9 ///为文件夹添加users,everyone用户组的完全控制权限
10 /// </summary>
11 /// <param name="dirPath"></param>
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 }
博客参考:
- C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限 - wolfy - 博客园 (cnblogs.com)
- (19条消息) 用inno setup制作管理员权限启动的安装包_一朵花开的时间-CSDN博客_inno setup 管理员权限
- Inno Setup 在安装过程中启动可执行文件(安装驱动程序) - 一杯清酒邀明月 - 博客园 (cnblogs.com)
C# 无需管理员权限提示,操作C盘文件的更多相关文章
- windows7安装phpnow Apache非管理员权限不能操作Windows NT服务的解决方法
科普一下:PHPnow 是什么? Win32 下绿色免费的 Apache + PHP + MySQL 环境套件包.简易安装.快速搭建支持虚拟主机的 PHP 环境,可以安装 Discuz! ...
- C# 以管理员权限删除文件
前言 通过后台,想删除C盘下”C:\\Windows\\winsxs\\Backup“的缓存文件. 然后提示对路径“C:\\Windows\\winsxs\\Backup\\amd64_hid-use ...
- golang windows程序获取管理员权限(UAC ) via gocn
golang windows程序获取管理员权限(UAC ) 在windows上执行有关系统设置命令的时候需要管理员权限才能操作,比如修改网卡的禁用.启用状态.双击执行是不能正确执行命令的,只有右键以管 ...
- Inno Setup打包的程序提升为管理员权限
Inno Setup打包的程序在Win7 64位系统上安装,安装步骤最后一步若选中运行程序,会跳出一个错误提示框. 这是因为64位win7系统运行程序时需要管理员权限,而打包的文件并没有这个权限就试图 ...
- WIN7操作平台获取管理员权限批处理
在WIN7操作平台打开某些文件,如果需要管理员权限才能打开.通过下面的操作就可以获取管理员权限 创建批处理register文件.文件内容为,文件后缀名为.reg.然后双击该文件.打开需要访问的文件,如 ...
- 【程序打包工具 Inno Setup】CreateProcess 失败:代码 740(Inno Setup打包的程序提升为管理员权限)
原文参考 https://www.cnblogs.com/SnailProgramer/p/4243666.html http://blog.csdn.net/x356982611/article/d ...
- Vista之前的版本,默认本地登陆用户都以管理员权限启动程序
Vista之前的版本,默认本地登陆用户都以管理员权限启动程序,之后的OS版本默认都没有管理员权限,需要用户提权才能做某些操作,否则需要管理员权限的操作都会失败MSSQL是用户名账号连接,Socket方 ...
- Inno Setup CreateProcess 失败:代码 740(Inno Setup打包的程序提升为管理员权限)
原文参考 https://www.cnblogs.com/SnailProgramer/p/4243666.html http://blog.csdn.net/x356982611/article/d ...
- golang windows程序获取管理员权限(UAC )
在windows上执行有关系统设置命令的时候需要管理员权限才能操作,比如修改网卡的禁用.启用状态.双击执行是不能正确执行命令的,只有右键以管理员身份运行才能成功.为解决此问题,花了很长时间找了各种方法 ...
随机推荐
- postman打开白屏
1.打开高级系统设置:2.在"高级"选项卡中,单击"环境变量":3.添加一个新的系统变量:POSTMAN_DISABLE_GPU=true4.关闭Postman ...
- junit单元测试踩过的坑
1.测试方法不能直接获取到系统初始化的配置信息,需要专门读取 2.单元测试多线程子线程不执行,不会像主线程一样等待子线程退出而退出, 会直接退出. . https://blog.csdn.net/yu ...
- linux离线安装插件包
1.下载插件包(联网的linux环境下) # 检查是否安装了vim(vim-minimal是vi) [root@localhost opt]# rpm -qa | grep vim vim-minim ...
- ubuntu手动创建快捷方式
新建document,重命名为XXX.desktop,打开文件 以sublime为例,填写 [Desktop Entry] Version=1.0 Type=Application Name=Subl ...
- 实验1.SDN拓扑实践
实验1:SDN拓扑实践 一.基本要求 (一)Mininet运行结果截图 (二) 使用Mininet的命令行生成如下拓扑: 1. 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线. 2. 3台 ...
- useBean类属性[javaChuLi.LoginBean]的值无效
今天遇到了一个错误,如图 参见:JSP 中给定的 useBean 标签的 class 属性的值无效_dkawskawx的博客-CSDN博客
- 在 Kubernetes 集群中部署现代应用的通用模式
在 Kubernetes 集群中部署现代应用的通用模式 摘要 我们正在经历现代应用交付领域的第二次浪潮,而 Kubernetes 和容器化则是这次浪潮的主要推动力量. 随着第二次浪潮的推进,我们在 N ...
- ArchKeeper (开篇):架构守护平台的问题与理念
作者:京东科技 倪新明 在敏捷开发环境下,系统通过迭代增量的交付价值,系统架构也是如此.团队不可能在项目之初就建立完美的系统架构,系统架构应该随着系统迭代不断演进.架构演进和架构腐化是看待架构的不同视 ...
- Python相关练习说明
Python练习情况说明 1.练习了在文件中进行统计的相关方法,基本操作其实差不多,步骤基本如下: # 1.打开相关文件,然后利用for循环进行按行读取的操作 # 2.读取的过程中,将读取到的数据加以 ...
- 针对于Sql server突然连接不到服务器的解决方法
问题叙述 点击连接之后,总是会弹出一个错误弹窗: 方法解决 快捷键Win+R,输入services.msc,进入到服务界面: 找到SQL 代理(DEV) 将手动打开改成自动 再连接试一次 连上啦! ( ...