首页 > 解决方案 > QProcess如何请求Windows UAC绕过密码使用runAs从管理员帐户进行管理员级别命令

问题描述

问题:谁能向我解释如何调用 UAC?此时,我需要提升一个 Powershell 会话。我过去使用过或在此处看到的所有其他方法都需要密码。我需要绕过密码。有关更多信息,请参阅以下功能下的说明:

void MainWindow::execute_command(QString param)
{
    // In this case assume param is simply Remove-LocalUser "User name"
    QProcess *process = new QProcess();
    QStringList params;
    QString command = "powershell";
    params << "-c" << "Start-Process powershell.exe -Verb runAs " << param;
    process->start(command, params);
    process->waitForFinished();
    process->kill();
}

如果我尝试任何管理员级别的命令,它无法在 Powershell 中执行,因为访问被拒绝。我知道可以提升用户访问权限的各种方法。但据我所知,所有这些都需要用户输入密码。默认情况下,运行此程序的任何帐户都是管理员或域管理员;因此,我希望召唤 UAC 将使用户能够确认并接受提升请求以通过管理员 Powershell 进行拉取。

标签: c++windowsqt

解决方案


我阅读您的问题的方式是您希望完全避免 UAC 提示。只要您在系统上启用 UAC 的交互式登录会话中运行程序,这是不可能的。

可以通过登录该帐户来避免输入管理员密码,但您仍然需要 UAC 提示才能使用提升的管理员令牌而不是大多数程序使用的受限令牌运行。

请注意,如果您的程序是服务,则该程序将在不提供拆分用户令牌的会话中运行,而是所有程序都将使用完整令牌运行(尽管大多数权限仍将被禁用,直到/除非进程启用它们)。


推荐阅读