QProcess не может запустить техобслуживание из exe без прав администратора - PullRequest
0 голосов
/ 10 октября 2018

Я вызываю QtoFW maintenancetool.exe из моего app.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.

Если я запускаю свое приложение с правами администратора, все идет нормально.

Есть лиспособ запустить exe-файл, требующий прав администратора, из другого exe-файла, который этого не использует, используя QProcess::start?Конечно, я стараюсь не открывать пользователям диалоговое окно с правами администратора при каждом запуске myapp.exe (только при поиске обновлений).

Я не могу использовать QProcess::startDeattached, так как мне нужно получитьвыходные данные.

ПРИМЕЧАНИЕ: все также работает нормально, если myapp.exe и maintenancetool.exe не установлены в Program Files, но находятся в любой другой обычной папке (например, C: / myfolder).

Редактировать

Я обнаружил, что проблема в том, что когда myapp.exe вызывает maintenancetool.exe и запрашиваются административные привилегии, обслуживаниеtotool.exe занимает слишком много времени (33 секунды).

Забавная частьвремя ожидания по умолчанию составляет 30 секунд

bool waitForFinished(int msecs = 30000);

Так что, если я назову это так, оно будет работать, но мне придется ждать 33 секунды!

process.waitForFinished( 60000 );

1 Ответ

0 голосов
/ 16 октября 2018

(Размещено решение от имени автора вопроса) .

Похоже, что Qto's maintenancetool.exe вообще не должен запрашивать права администратора, это ошибка, сообщенная для 3.0.2 (версия, которую я использую), и это исправлено в 3.0.4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...