簡體   English   中英

如何在Windows上通過QProcess啟動提升的子流程?

[英]How to start an elevated subprocess through QProcess on Windows?

我正在使用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命令 ,它對於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

編輯:您還可以嘗試使用清單,作為描述在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM