• 10726阅读
  • 5回复

[提问]QT里如何调用系统提示,让用户输入密码获得管理员权限? [复制链接]

上一主题 下一主题
离线happyeddie
 

只看楼主 倒序阅读 楼主  发表于: 2011-11-29
— 本帖被 XChinux 设置为精华(2013-03-19) —
新手刚入门,问个可能比较基础的问题
比如在MAC,Ubuntu里,需要root权限时,都会提示用户输入密码提升权限,并且以后此程序就一直都有root权限了
Windows的UAC也有类似功能
QT中有统一的接口来实现这个功能么?
离线happyeddie

只看该作者 1楼 发表于: 2011-11-30
木有人知道么?
离线XChinux

只看该作者 2楼 发表于: 2011-12-01
没有,自己调用win32 API,下面是示例(isAdminUserLogin(),自己写,判断当前用户是否是管理员)


void MainWindow::runApplicationAsAdmin(const QString &strPathExe)//{{{
{
#ifdef Q_WS_WIN
    if (IsAdminUserLogin())
    {
        QDesktopServices::openUrl(QUrl::fromLocalFile(strPathExe));
    }
    else
    {
        std::wstring str = strPathExe.toStdWString();
        SHELLEXECUTEINFO shExecInfo;  
        shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);  
        shExecInfo.fMask = NULL;  
        shExecInfo.hwnd = NULL;  
        shExecInfo.lpVerb = L"runas";  
        shExecInfo.lpFile = str.c_str();
        shExecInfo.lpParameters = NULL;  
        shExecInfo.lpDirectory = NULL;  
        shExecInfo.nShow = SW_MAXIMIZE;  
        shExecInfo.hInstApp = NULL;  
        ShellExecuteEx(&shExecInfo);
    }
#elif defined(Q_WS_X11)
    QDesktopServices::openUrl(QUrl::fromLocalFile(strPathExe));
#endif
    close();
}//}}}
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线roywillow

只看该作者 3楼 发表于: 2011-12-01
Qt自己好像没提供这方面的东西
搜索了一下,windows下可以用CreateProcessAsUser()和ShellExecuteEx()以管理员权限运行外部程序,然后我想大概可以从这个外部程序来执行那些需要管理员权限的操作
如果是直接提升自己的权限,似乎这两个有帮助:
http://hi.baidu.com/%B7%E7%D6%AE%D2%E2/blog/item/c3fbf2198d7064138718bf7c.html
http://blog.csdn.net/abcpanpeng/article/details/4953529
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 4楼 发表于: 2011-12-02
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线happyeddie

只看该作者 5楼 发表于: 2011-12-04
谢谢两位~~
快速回复
限100 字节
 
上一个 下一个