dotnet 判断程序当前使用管理员运行降低权使用普通权限运行

摘要:
有一些程序是不想通过管理员权限运行的,因为在很多文件的读写,如果用了管理员权限程序写入的程序,其他普通权限的程序是无法直接访问的。本文告诉大家如何判断当前的程序是通过管理员权限运行,然后通过资源管理器使用普通权限运行

有一些程序是不想通过管理员权限运行的,因为在很多文件的读写,如果用了管理员权限程序写入的程序,其他普通权限的程序是无法直接访问的。本文告诉大家如何判断当前的程序是通过管理员权限运行,然后通过资源管理器使用普通权限运行

通过下面代码可以判断当前的程序是管理员权限运行

            var identity = WindowsIdentity.GetCurrent();
            var principal = new WindowsPrincipal(identity);
            if (principal.IsInRole(WindowsBuiltInRole.Administrator))
            {
                // 当前正在以管理员权限运行。
            }

如果是 dotnet core 程序,需要安装 Microsoft.Windows.Compatibility 才可以使用上面代码

通过 Explorer 运行自己,在 dotnet framework 程序和 dotnet core 程序在获得自己的 exe 文件的方法是不同的

在 dotnet framework 程序可以直接在 Main 函数通过 Assembly.GetEntryAssembly().Location 拿到 exe 文件的路径

                Process.Start("explorer.exe", Assembly.GetEntryAssembly().Location);

但是如果在 dotnet core 程序,通过 Assembly.GetEntryAssembly().Location 会拿到 xx.dll 而不是 exe 的路径,需要使用下面的代码拿到 exe 的文件

// 方法1

                var file = new FileInfo(Assembly.GetExecutingAssembly().Location);
                var exe = Path.Combine(file.DirectoryName, file.Name.Replace(file.Extension, "")+".exe");

// 方法2
                var exe = Process.GetCurrentProcess().MainModule.FileName;

// 更多方法

然后自己关闭

            var identity = WindowsIdentity.GetCurrent();
            var principal = new WindowsPrincipal(identity);
            if (principal.IsInRole(WindowsBuiltInRole.Administrator))
            {
                var file = new FileInfo(Assembly.GetExecutingAssembly().Location);
                var exe = Path.Combine(file.DirectoryName, file.Name.Replace(file.Extension, "") + ".exe");
           	
                // 检测到当前进程是以管理员权限运行的,于是降权启动自己之后,把自己关掉。
                Process.Start("explorer.exe", Assembly.GetEntryAssembly().Location);
                Environment.Exit(0);
            }

在 Windows 系统上降低 UAC 权限运行程序(从管理员权限降权到普通用户权限) - walterlv

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

免责声明:文章转载自《dotnet 判断程序当前使用管理员运行降低权使用普通权限运行》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Redis----windows下的常用命令二C#使用SmtpClient发送邮件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python之threading多线程,多进程

1、threading模块是Python里面常用的线程模块,多线程处理任务对于提升效率非常重要,先说一下线程和进程的各种区别,如图  概括起来就是 IO密集型(不用CPU) 多线程计算密集型(用CPU) 多进程使用线程和进程的目的都是为了提升效率(1)单进程单线程,主进程、主线程(2)自定义线程: 主进程...

ubuntu 的权限和目录

/ : 根目录 /bin 和 /sbin中放置的是可执行文件   /etc 里面放的是配置文件    /boot 引导 /mnt  是挂载目录 /home   主目录   /dev  设备 /usr linux中自动安装软件的存放位置 文件类型 d : directory 目录文件 - : file b : block 块文件 l : link 相当于wi...

mac 驱动

Mac OS硬件驱动(.kext)安装方法一、Mac驱动程序的概念我想用我所理解的系统概念为各位稍微的介绍一下在Mac上的驱动程序概念,基本上,Mac OS X Tiger是一个UNIX架构的核心的系统,所以如果有一些UNIX系统概念其实在底层的架构会很容易了解,系统核心,通常会有包含了硬件支持的程序在内,也就是说有一些需要在系统核心启动就跟着支持的基础硬...

WebView2简单试用(八)—— 右键菜单

默认菜单: WebView2本身携带了类似Edge的右键菜单,但有的时候我们需要对它进行一些修改。 禁止dev菜单     webView.CoreWebView2.Settings.AreDevToolsEnabled = false; 禁止所有菜单     webView.CoreWebView2.Settings.AreDefaultConte...

微信小程序,前端大梦想(三)

微信小程序的事件及生命周期   继续下节课,今天我们还是从四个方面来了解小程序:     ●常用事件和事件冒泡   ●配置   ●app生命周期及app对象的使用   ●页面的生命周期   一、事件的绑定:   事件一方面可以理解成用户的行为,当用户对UI层做了某些操作时,程序可以捕捉到操作的类型。如:点击、长按、移动等。另一方面事件也是一种通讯方式,...

微软正则表达式工具

rex.exe "[0-9](2)" /k:10 /encoding:ascii Rex :http://research.microsoft.com/en-us/downloads/7f1d87be-f6d9-495d-a699-f12599cea030/ ...