zoukankan      html  css  js  c++  java
  • .net程序和管理员权限的一些事

    1.对某个方法设置管理员权限运行(未考证)(假的,必须以管理员权限启动,不然报错)

    
    [PrincipalPermission(SecurityAction.Demand, Role = @"BUILTINAdministrators")]
    public void MyMethod()
    {
    }
    

    参考

    2.程序以管理员权限启动(通过修改项目配置)

    方法1:添加mainfast文件,添加下面的代码:

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

    具体操作

    3.程序中检测并以管理员权限启动
    以下代码,虽然是弹出 管理员权限启动提示窗口,但是实际好像没有生效(不能创建文件夹,而右击菜单--管理员权限启动的话则可以)

    
    System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
    System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
    //判断当前登录用户是否为管理员
    if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))
    {
        return;
    }
    else
    {
        //创建启动对象
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.UseShellExecute = true;
        startInfo.WorkingDirectory = Environment.CurrentDirectory;
        startInfo.FileName = Application.ExecutablePath;
        //设置启动动作,确保以管理员身份运行
        startInfo.Verb = "runas";
        try
        {
            System.Diagnostics.Process.Start(startInfo);
        }
        catch
        {
            return;
        }
        //注意!!!!下面的代码是错误的,用下面的方式退出的话,重启不会真正的以管理员权限启动。需要直接从Main中return
        //太奇葩了
        //Application.Exit();
     
    }
    
    

    2017/6/30 更新
    如何检测需要管理员权限呢?
    为了提升用户体验,避免不必要的权限请求。
    这里提供一个土方法, 直接在程序目录下读写文件,如果有权限异常,那么就需要提升权限。没有则不需要。
    要考虑的问题,读、写、创建 文件、目录 要周全。

    代码来源

  • 相关阅读:
    下定决心
    SPFA
    Linux下一些常用的命令
    如何设计符合RESTful风格的API
    django中的第三方:富文本编辑器和itsdangerous加密
    redis主从
    redis集群
    django中关联(一对多)查询的两种方式,理一理
    关于Django中的迁移文件
    日常工作中Git的正确使用姿势
  • 原文地址:https://www.cnblogs.com/yczz/p/4971059.html
Copyright © 2011-2022 走看看