Q没有管理权限的 exe 无法启动维护工具

QProcess cannot start maintenancetool from exe without administrative privileges

本文关键字:启动 维护 工具 exe 管理 管理权 权限      更新时间:2023-10-16

我从我的应用程序调用QtIFW的维护工具.exe.exe以检查如下更新:

QString command = QString( ""C:/Program Files/My Application/maintenancetool.exe" --checkupdates" );
QProcess process;
process.start( command );
process.waitForFinished();
if ( process.error() != QProcess::UnknownError )
{
return;
}
QByteArray data = process.readAllStandardOutput();

如果我运行我的应用程序,它会在执行maintenancetool.exe --checkupdates调用时显示管理权限对话框,就像任何其他需要权限的应用程序一样,我说是接受。然后,我的应用程序挂起了一段时间,最后 process.error(( 返回QProcess::Timedout错误。

如果我使用管理权限运行我的应用程序,一切正常。

有没有办法使用QProcess::start从另一个不需要管理权限的 exe 中运行需要管理权限的 exe?当然,我试图避免用户每次运行myapp时都打开管理权限对话框.exe(仅在查找更新时(。

我无法使用QProcess::startDeattached,因为我必须检索输出。

注意:如果myapp.exe和维护工具.exe没有安装在程序文件中,而是安装在任何其他常规文件夹(例如C:/myfolder(中,则一切也可以正常工作。

编辑

我发现问题是当myapp.exe调用维护工具时.exe并请求管理权限时,维护工具.exe需要很长时间才能完成(33秒(。

有趣的是,默认等待时间为30秒

bool waitForFinished(int msecs = 30000);

所以,如果我这样称呼它,它可以工作,但我必须等待 33 秒!

process.waitForFinished( 60000 );

(代表问题作者发布解决方案(。

看来Qt的维护工具.exe根本不应该要求管理员权限,这是3.0.2(我使用的版本(报告的错误,并且在3.0.4中得到了修复。