作者: 乔克斯
查看: 4291|回复: 8
打印 上一主题 下一主题

[教程] 【Exe是否是管理员运行】C#判断当前程序是否通过管理员运行

[复制链接]
跳转到指定楼层
楼主
乔克斯 发表于 2014-11-18 10:58:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查看: 4291|回复: 8
【Exe是否是管理员运行】C#判断当前程序是否通过管理员运行
说明:
   在Win7下有时候经常会出现程序无法写入注册表或者其他完成一些其他对系统数据的读取和修改,这个时候大多是没有权限,当然这个是可以通过在程序可执行文件上面右 键》》以管理员身份运行来解决的。
  • 但是很多情况下客户并不知道这样做,所以为了提高用户体验我们可以在程序中来通过判断是否通过管理员运行来给予相应的提示。
  • 这里写好了一个方法以供调用,注意需要引命名空间:using System.Security.Principal;

代码:
[C#] 纯文本查看 复制代码
public static bool IsAdministrator()
        {
            WindowsIdentity current = WindowsIdentity.GetCurrent();
            WindowsPrincipal windowsPrincipal = new WindowsPrincipal(current);
            //WindowsBuiltInRole可以枚举出很多权限,例如系统用户、User、Guest等等
            return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
        }


编后语:
    当然有的系统或者程序默认就是管理员权限的,有的不是,有了这个判断就可以避免本身没有权限读取而我们有没有预料到导致程序异常的问题了。
当然可以给用户一个提示告诉用户如何给相应的运行权限。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 转播转播
回复 论坛版权

使用道具 举报

推荐
Misaya 发表于 2014-12-29 15:49:37 | 只看该作者
VISTA 和 Windows 7 都使用了UAC来控制程序访问,对于一些需要使用管理员身份运行的程序就得右键以管理员身份运行。
C# 编程中可以使程序自动使用管理员身份运行,也就是我们常常看到一些程序的图标上会冒出个盾牌。
方法:在源码的Properties目录中找到 app.manifest,
将其中level="asInvoker" 改成 level="requireAdministrator"就可以了,
如果没有app.manifest文件可以打开项目属性,找到安全性项,勾上启用 ClickOnce 安全设置,这时会生成app.manifest文件,
然后再把勾去掉,不要选上。
这样你重新编译,你的程序图标上就会出现个小盾牌了,就自动以管理员身份运行你的程序,无需右键打开。
沙发
qq836150200 发表于 2014-12-17 17:06:03 | 只看该作者
受教…………
回复

使用道具 举报

板凳
qq836150200 发表于 2014-12-17 17:06:06 | 只看该作者
受教…………
回复

使用道具 举报

地板
 楼主| 乔克斯 发表于 2014-12-18 10:28:22 | 只看该作者

头像卡哇伊捏。
6#
Misaya 发表于 2014-12-29 15:50:40 | 只看该作者
[XML] 纯文本查看 复制代码
 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC 清单选项
            如果要更改 Windows 用户帐户控制级别,请用以下节点之一替换 
            requestedExecutionLevel 节点。

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

            指定 requestedExecutionLevel 节点将会禁用文件和注册表虚拟化。
            如果要利用文件和注册表虚拟化实现向后 
            兼容性,则删除 requestedExecutionLevel 节点。
        -->
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
      <applicationRequestMinimum>
        <defaultAssemblyRequest permissionSetReference="Custom" />
        <PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
      </applicationRequestMinimum>
    </security>
  </trustInfo>
7#
 楼主| 乔克斯 发表于 2014-12-29 16:04:12 | 只看该作者
Misaya 发表于 2014-12-29 15:50
[mw_shl_code=xml,true]
   
      

这个贴的代码主要是,在程序中判断你是否是管理员权限执行的一个作用。
8#
881966 发表于 2018-12-6 07:23:31 | 只看该作者
谢谢分享,学习学习
9#
jacksonwong 发表于 2019-5-18 12:50:44 | 只看该作者
谢谢分享了!
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-11-16 08:28, Processed in 0.689367 second(s), 29 queries , Gzip On.

快速回复 返回顶部 返回列表