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

时间:2017-07-12 11:49:48

标签: c++ windows qt uac

我使用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);
}

1 个答案:

答案 0 :(得分:0)

您可能需要查看runas command,它可以替代Windows的pkexec

例如,您可以尝试

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

修改:您还可以尝试使用清单,如here所述。