微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QProcess 如何请求 Windows UAC 使用 runAs 绕过来自管理员帐户的管理员级别命令的密码

如何解决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。

解决方法

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

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

>

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

,

所以,@RbMm 是正确的,我的代码是错误的:

void MainWindow::execute_command(QString param)
{
     SHELLEXECUTEINFO ShExecInfo = {0};
     ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
     ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
     ShExecInfo.hwnd = NULL;
     ShExecInfo.lpVerb = "runas";
     ShExecInfo.lpFile = TEXT("powershell.exe");
     ShExecInfo.lpParameters = TEXT("stuff..");
     ShExecInfo.lpDirectory = NULL;
     ShExecInfo.nShow = SW_SHOW;
     ShExecInfo.hInstApp = NULL;
     ShellExecuteEx(&ShExecInfo);
     WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
}

召唤 UAC 提示,它允许我根据用户是否单击 UAC 上标有“是”的按钮进行升级!感谢大家的帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。