【发布时间】:2017-07-12 11:49:47
【问题描述】:
我正在使用 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);
}
【问题讨论】:
-
您是否检查过有关从 cmd 或 powershell 运行提升的可执行文件的其他答案?我认为您必须针对特定系统进行处理,就像在 linux 上一样。
-
是的,他们都没有给我一个满意的答案。大多数建议使用 ShellExecute 函数,但我想通过 QProcess。
-
pkexec 已经有点像黑客了,不是吗?
-
不,这不是黑客攻击。