如何在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
命令,它在某种程度上是 Windowspkexec
的替代方法。
例如,您可以尝试
#elif defined(Q_OS_WIN32)
args.prepend(program);
args.prepend("/user:mymachineadministrator"); // Change accordingly
args.prepend("/noprofile"); // See link above
program = "runas";
#endif
编辑:您也可以尝试使用清单,如此处所述。
相关文章:
- 终止 QProcess 不会终止子进程
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 子进程更新共享 mmap 内存,但父进程没有更改
- 使用 waitpid 时等待子进程终止
- 使用重定向标准处理子进程中的 kbhit
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- kill() 总是返回 0(成功),即使在子进程已经结束之后?
- 父进程和子进程之间的 POSIX 信号量
- 检测到由于操作系统内存不足而导致子进程终止
- 如何在Windows上通过QProcess启动提升的子进程?
- 启动子进程时的争用条件导致从管道读取挂起
- 如何在浏览器子进程主机Impl->启动后获取浏览器子进程的进程ID
- 如何使用特定的访问权限启动子进程
- 将进程作为子进程启动到服务
- 在父进程内启动子进程进程
- C++ GUI 应用程序:在 WndProc 中启动子进程(无 MFC)
- 我的win32程序是否有办法告诉它启动的子进程已经崩溃(而不仅仅是退出)?
- 暂停并恢复 Qt 中由 QProcess 启动的子进程
- 如何将应用程序作为新创建的资源管理器进程的子进程启动