• VC如何将自身进程提升至管理员权限


    方法1、代码实现

        http://zhidao.baidu.com/question/260744247.html

    方法2、编译选项设置

           http://msdn.microsoft.com/zh-cn/library/bb384691.aspx

    方法3、在资源文件中添加一个自己的manifest文件

    方法1、代码实现

    3.67 icePub_runByAdmin

    l 函数原型:
    int WINAPI icePub_runByAdmin(char *strAppPathName,char *strSuParam)
    输入:strAppPathName 带路径应用程序文件名;为空则默认本身应用程序
    strSuParam 以管理员权限启动程序的命令行参数;为空则默认为"su "
    输出:

    l VC连接Lib方式声明
    __declspec(dllexport)
    int WINAPI icePub_runByAdmin(char *strAppPathName,char *strSuParam);

    l 动态调用例程
    VC sample 代码:
    int runByAdmin(void)
    {
    int retCode=-1;

    typedef int (WINAPI ICEPUB_RUNBYADMIN)(char *strAppPathName,char *strSuParam);
    ICEPUB_RUNBYADMIN *icePub_runByAdmin = 0;
    HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
    if(hDLLDrv)
      icePub_runByAdmin = (ICEPUB_RUNBYADMIN *)GetProcAddress(hDLLDrv, "icePub_runByAdmin");

    if(icePub_runByAdmin)
      retCode=icePub_runByAdmin("","");
    if(hDLLDrv)
      FreeLibrary(hDLLDrv);

    if(retCode == 0)
        exit(0);
    if(retCode == -1)
      AfxMessageBox("以管理员启动失败,请手动启动");

    return retCode;
    }

    方法2、编译选项设置

    /MANIFESTUAC(将 UAC 信息嵌入到清单中)

    Visual Studio 2010

    指定是否将用户帐户控制 (UAC) 信息嵌入到程序清单中。

    /MANIFESTUAC
    /MANIFESTUAC:NO
    /MANIFESTUAC:fragment
    /MANIFESTUAC:level=_level
    /MANIFESTUAC:uiAccess=_uiAccess
    
    fragment

    一个字符串,它包含 leveluiAccess 值。 有关更多信息,请参见本主题中后面的“备注”部分。

    _level

    asInvoker、highestAvailable 或 requireAdministrator 之一。 默认为 asInvoker。 有关更多信息,请参见本主题中后面的“备注”部分。

    _uiAccess

    如果您希望应用程序绕过用户界面保护级别并将输入引导到桌面上的更高权限窗口(如屏幕键盘),则为 true;否则为 false 默认为 false 仅针对用户界面辅助功能应用程序设置为 true

    如果您在命令行上指定多个 /MANIFESTUAC 选项,则最后输入的选项优先级最高。

    /MANIFESTUAC:level 的选项包括:

    • asInvoker:应用程序将使用与启动它的进程相同的权限运行。 可通过选择“以管理员身份运行”将应用程序提升为更高权限。

    • highestAvailable:应用程序将使用可能的最高权限级别运行。 如果启动该应用程序的用户为管理员组的一个成员,则此选项与 requireAdministrator 相同。 如果可用的最高权限级别高于打开进程的级别,则系统将提示提供凭据。

    • requireAdministrator:应用程序将使用管理员权限运行。 启动该应用程序的用户必须是管理员组的一个成员。 如果打开进程未使用管理权限运行,则系统将提示提供凭据。

    您可以通过使用 /MANIFESTUAC:fragment 选项在一个步骤中指定 level 和 uiAccess 值。 代码片段的格式必须是:

    "level=[ asInvoker | highestAvailable | requireAdministrator ] uiAccess=[ true | false ]"
    

    在 Visual Studio 开发环境中设置此链接器选项

    1. 打开该项目的“属性页”对话框。 有关详细信息,请参见如何:打开项目属性页

    2. 展开“配置属性”节点。

    3. 展开“链接器”节点。

    4. 选择“清单文件”属性页。

    5. 修改“启用用户帐户控制(UAC)”“UAC 执行级别”“UAC 绕过 UI 保护”属性。

    以编程方式设置此链接器选项

    方法3、

    在MinGW或VS 2005 SP1环境下创建一个要求UAC权限的程序。

  • 相关阅读:
    mybatis-plus物理分页插件使用
    mybatis-plus提供支持ActiveRecord模式
    mybatis-plus通用Service
    mybatis-plus返回查询总记录数
    Mybatis-Plus查询返回Map类型数据
    Mybatis-Plus条件构造器condition动态判断条件
    Mybatis-Plus条件构造器select方法返回指定字段
    mybatis-plus条件构造器UpdateWrapper实例
    mybatis-plus条件构造器QueryWrapper实例
    这玩意比ThreadLocal叼多了,吓得why哥赶紧分享出来。
  • 原文地址:https://www.cnblogs.com/carl2380/p/2100096.html
Copyright © 2020-2023  润新知