如何在Windows上通过QProcess启动提升的子进程?

How to start an elevated subprocess through QProcess on Windows?

本文关键字:启动 子进程 QProcess Windows      更新时间:2023-10-16

>我正在使用QProcess类来启动执行任务的子进程。有时,进程需要管理员权限。在Linux上,我只需通过pkexec运行它,一切正常。如何在Windows上实现相同的效果?

需要明确的是:我希望能够在运行时决定是否以管理员身份运行它。我还需要能够通过 stdin/stdout 与进程进行通信。

或者,将其放入代码中:

void modifyArgsForRoot(QString &program, QStringList &args)
{
#if defined(Q_OS_LINUX)
args.prepend(program);
program = "pkexec";
#elif defined(Q_OS_WIN32)
// what do I put here? //////////////////////////////
#endif
}
void foo()
{
QProcess p;
QString program;
QStringList arguments;
// ......
if (!hasWriteAccessToCertainDir())
modifyArgsForRoot(program, arguments);
p.start(program, arguments);
}

您可能想看看runas命令,它在某种程度上是 Windowspkexec的替代方法。

例如,您可以尝试

#elif defined(Q_OS_WIN32)
args.prepend(program);
args.prepend("/user:mymachineadministrator"); // Change accordingly
args.prepend("/noprofile"); // See link above
program = "runas";
#endif

编辑:您也可以尝试使用清单,如此处所述。