有时候,我们需要知道当前程序是否以管理员身份运行,以便执行一些需要特殊权限的操作。

在github(https://github.com/dotnet/runtime/issues/25118#issuecomment-367407469)上找到了一个解决方案:

//需要引用nuget包Mono.Posix.NETStandard
public static bool IsAdministrator =>RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ?new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator) :Mono.Unix.Native.Syscall.geteuid() == 0;

好了,问题解决,文章写完了。

等等!Windows 下的判断很好理解,用户属于 Administrator 角色。但是 linux 下的geteuid() == 0是什么意思?

euid

linux 系统中每个进程都有2个 ID,分别为用户 ID(uid)和有效用户 ID(euid)。

root的用户 ID确实是0。

Console.WriteLine($"UID: {Mono.Unix.Native.Syscall.getuid()}");
Console.WriteLine($"EUID: {Mono.Unix.Native.Syscall.geteuid()}");

我又换成demo1用户试了一下,这2个Id也是一样的。

那为什么要搞2个Id呢?

setuid

因为linux系统有一个功能:如果一个程序被设置了 setuid 位,那么它无论被哪个用户执行,都会具备 setuid 对应用户的权限,进程的 EUID 也会变成对应用户的 UID。

Demo

我们来试验一下,默认情况下demo1用户无法操作1.txt,因为文件是由root用户创建的,如下图:

当我们使用root用户设置了 setuid 位后,可以发现程序的权限起了变化:

这时我们再次运行程序,发现1.txt操作成功,而且euid也变成0(root用户)了。

结论

综上,github 上给的解决方案非常完美,如果你要判断当前用户是否root,则需要使用getuid() == 0

想了解更多内容,请关注我的个人公众号”My IO“

如何判断 .NET Core 应用程序是以管理员身份运行相关推荐

  1. C# 让程序自动以管理员身份运行

    VISTA Windows 7 都使用了UAC来控制程序访问,对于一些需要使用管理员身份运行的程序就得右键以管理员身份运行. C# 编程中可以使程序自动使用管理员身份运行,也就是我们常常看到一些程序的 ...

  2. 设置/取消 应用程序始终以管理员身份运行

    设置应用程序始终以管理员身份运行 1.通过计算机管理永久开启Administrator管理员账号登录 右键桌面的"计算机" - 选择"管理"; 依次展开&quo ...

  3. c#通过app.manifest使程序 右键 以管理员身份运行

    c#通过app.manifest使程序以管理员身份运行 时间:2013-06-27 22:47来源:网络收集+本站整理 作者:jtydl 点击: 1175 次 微软在Windows Vista开始引入 ...

  4. VS 如何设置编译后的程序可以以管理员身份运行

    1.首先,创建一个文件命名为 XXX.exe.manifest, 并将以下内容复制到文件 <?xml version="1.0" encoding="UTF-8&q ...

  5. [Winform]默认以管理员身份运行程序

    摘要 在使用setupfactory打包之后,想让程序默认以管理员身份运行,因为涉及到创建文件删除文件的操作,如果权限比较低的话,会出现没有权限操作的bug. 解决办法 在项目中找到app.manif ...

  6. c#中程序以管理员身份运行的三种办法

    三种办法: 一.设置程序本身的属性:勾选"以管理员身份运行此程序",必要时设置"更改所有用户设置-以管理员身份运行此程序",当然这种办法是被动的,也不是最实际的 ...

  7. 如何自动以管理员身份运行.NET程序?

    windows 7和vista提高的系统的安全性,同时需要明确指定"以管理员身份运行"才可赋予被运行软件比较高级的权限,比如访问注册表等.否则,当以普通身份运行的程序需要访问较高级 ...

  8. windows下默认以管理员身份运行程序

    可以通过注册表项实现该功能 1. 运行regedit打开注册表编辑器 2. 定位到如图所示注册表项 3. 右键空白处新建字符串值 4. 名称填入要以管理员身份运行的程序的全路径,数值数据填入RUNAS ...

  9. C# 以管理员身份运行程序

    刚看了一篇博友写的"以管理员身份运行程序", 所以我也来写一个简单易懂的,简单两步搞定,不用写任何代码: 第一步: 右键选择项目 > 添加 > 新建项 : 找到 应用程 ...

最新文章

  1. PyTorch学习笔记——pytorch图像处理(transforms)
  2. 理解Golang的Time结构
  3. HDU 2094 产生冠军 (map容器)
  4. python爬虫——利用BeautifulSoup4爬取糗事百科的段子
  5. oracle idl_ub1$,system表空间急剧增大原因分析
  6. uboot中关于LCD的代码分析
  7. 渗透测试入门8之端口渗透
  8. Struts 2读书笔记-----使用Action的动态方法调用
  9. jQuery.fn.extend 与 jQuery.extend 用法
  10. python colormap函数_Python colormap库的安装和使用详情
  11. AES128位数据加密算法【直接拷贝可用】
  12. Tomcat使用过滤器实现页面的限制访问,登录才能访问受限页面
  13. 联想z400成功带起外置显卡gtx1050
  14. html登录cdn,html cdn
  15. 嵌入式是什么?为什么引入嵌入式技术?嵌入式技术的优缺点?
  16. 华为OD机试 - 用连续自然数之和来表达整数(Java JS Python)
  17. 【中电十所】秋招提前批一面、二面面经
  18. 【笔记】Polygon mesh processing 学习笔记(7)
  19. python中文分词之jieba分词的使用
  20. 基于DE2-115 FPGA开发板的VGA显示

热门文章

  1. Dinic算法----最大流常用算法之一
  2. 【转载】关于测试人员的职业发展
  3. (转)直接拿来用!最火的iOS开源项目(一)
  4. ^_^家园游记^_^
  5. Open Flash Chart 初体验
  6. java中自定义表单和流程_让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑....
  7. python 多个列表_Python同时迭代多个列表
  8. MySQL的常见存储引擎介绍与参数设置调优(转载)
  9. 利用java实现excel转pdf文件
  10. 003Java语言环境搭建