【问题标题】:How can i checkif the user is running a n app as Admin in c#? [duplicate]如何检查用户是否在 c# 中以管理员身份运行 n 应用程序? [复制]
【发布时间】:2021-03-08 21:10:27
【问题描述】:

我有一个 Windows 应用程序,我使用以下命令检查是否以管理员身份运行:

    public static bool IsAdministrator()
    {
        var identity = WindowsIdentity.GetCurrent();
        var principal = new WindowsPrincipal(identity);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);            
    }

     if (!IsAdministrator())
     {
         AlrtBox.Show("Run as Admin");
     }

但是,如果我设置 .exe 文件的快捷方式并取消选中以管理员身份运行的复选框,无论选中还是未选中,它似乎仍然运行。 我想我正在检查用户是否是 windows 上的管理员(他们是),但如果复选框被选中则不是。

我想检查应用程序是否以 admin 身份运行,无论 Windows 上的用户如何。 我该怎么做?

【问题讨论】:

  • 不确定你在问什么。在什么情况下您希望将“IsAdministrator”返回为真或假?管理员帐号?用户有管理员权限? RunAs 管理员帐户?
  • 不管用户是谁,即使他们是管理员。我想确保应用程序(.exe)以管理员身份运行。即高级属性中的复选框被选中以管理员身份运行?
  • 啊,好的。好吧,一种方法是尝试做一些只有管理员才能做的事情——比如尝试向注册表的 HKLM 部分写入一个无害的值?
  • 也许最好只尝试管理操作和处理失败而不是(不正确地)检查是否可以执行它?
  • 您的管理员测试对我来说很合适。如果您不想在清单中设置 requireAdministrator,您可以通过 shell 执行“runas”来重新启动您的进程 (stackoverflow.com/questions/2532769/…)。

标签: c#


【解决方案1】:

如果程序总是需要以管理员身份运行,您可以使用 Application.manifest 文件。

How do I create/edit a Manifest file

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

【讨论】:

  • 我可以了解一下清单文件在 c# 代码中的作用吗?
  • 您将 Application.manifest 文件添加到您的项目中。在菜单上,项目 => 添加新项目 => 应用程序清单文件
  • 如果你只是想检查,那么你可以像上一篇文章中的cmets中所说的@stuartd那样做一些事情,但不要将值写入注册表,而是尝试将文本文件写入%SystemRoot %\system32(例如:C:\Windows\system32)。使用异常处理(try-catch)。如果写入成功,则删除文件。
猜你喜欢
  • 2020-07-31
  • 2017-09-15
  • 2015-02-06
  • 1970-01-01
  • 2011-04-02
  • 2011-12-29
  • 2011-05-20
  • 2011-10-22
相关资源
最近更新 更多