以管理员身份从 qt 运行 pnputil(或其他 Windows 内置)

Posted

技术标签:

【中文标题】以管理员身份从 qt 运行 pnputil(或其他 Windows 内置)【英文标题】:running pnputil (or other windows built-in) from qt, as administrator 【发布时间】:2014-07-17 22:32:20 【问题描述】:

如何在 Qt C++ 应用程序中运行 pnputil?以下失败,lstderr 显示“pnputil 未被识别为内部或外部命令”。大概是因为 pnputil 是内置的(替换非内置的确实有效)。 QProcess 类参考说“cmd /c”格式是 Windows 内置的“可能的解决方案”,但对我来说不是。

QProcess process;
process.start("cmd /c \"pnputil -e\"" );

if (!process.waitForStarted())
    return false;

if (!process.waitForFinished())
    return false;

QByteArray lstderr = process.readAllStandardError();
QByteArray lstdout = process.readAllStandardOutput();

【问题讨论】:

需要cmd ...?仅使用QProcess。其他问题:pnputil在系统的变量中吗? 【参考方案1】:

您的进程可能使用了错误的路径来查找可执行文件。尝试通过完整路径调用 PnPUtil:

%WINDIR%\System32\PnPUtil.exe

你可以用来逗留Qt Land:

qgetenv("WINDIR");

如果您的应用程序仅适用于 Windows,并且您不介意使用本机调用:

GetWindowsDirectory();

【讨论】:

没有帮助——在 Windows7 中 PnPutil 是内置的,不存在(或任何地方)......这是问题所在。我可以调用任何可执行文件,问题出在内置函数上。 我运行win7并且确实有pnputil.exe 你试过打电话给where pnputil吗?这个命令的返回值是什么?我已经阅读了它在某些系统上的缺失,有一种解决方法捆绑了一些微软(认为它是 DPInst)或使用本机 Windows api。 如果这是“shell builtin”,另一种方法是生成一个运行 pnputil.exe 的 shell(可以在 QProcess 中使用输入/输出完成)

以上是关于以管理员身份从 qt 运行 pnputil(或其他 Windows 内置)的主要内容,如果未能解决你的问题,请参考以下文章

如何以不同用户和管理员身份从命令提示符运行程序 [关闭]

Qt Creator开发的程序提升到管理员权限运行

BAT 文件不会在 Windows 10 任务计划程序中运行,但会以管理员身份或在提升的命令提示符下运行

如何以管理员身份运行

如何让Delphi程序启动自动“以管理员身份运行

pnputil.exe无法识别为内部或外部命令[关闭]