如何解决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 举报,一经查实,本站将立刻删除。