Я написал приложение Qt, которое загружает, а затем выполняет файл MSI. Выполнение осуществляется через QProcess
и использует информацию, предоставленную в этот вопрос.
Всякий раз, когда я запускаю его, используя QProcess
исключение выдается:
Исключение: нарушение прав на чтение
которая кажется проблемой управления правами. Однако я не знаю, где именно проблема и как ее исправить. Вот пример кода:
QProcess *process = new QProcess(this);
QString program = "file.msi";
QString folder = "C:\\Users\\user\\Downloads\\";
process->start(program, QStringList() << folder);
Проблема заключается в том, что MSI-файл является установочным файлом, поэтому он требует прав администратора.
Есть два варианта:
QDesktopServices::openUrl(QUrl("file:///<path to your MSI file>"), QUrl::TolerantMode));
(как предложено Вот) Вместо того, чтобы использовать QProcess
,runas
позвонив QProcess::startDetached("runas /user:<localmachinename>\user msiFileName");
где вы заменяете соответствующие строки своими (для этого вы должны проверить документация runas
так как это не имеет ничего общего с Qt, но с аргументами командной строки runas
,Кроме того, вы можете запустить ваше приложение Qt с правами администратора. Для того, чтобы сэкономить пользователю рубль, сделав это вручную, вы можете использовать этот чтобы сказать Windows, каким должно быть выполнение по умолчанию вашего приложения Qt. Я бы не советовал этого делать, потому что ваше приложение может привести к бреши в системе, за которую вы можете быть привлечены к ответственности.
Других решений пока нет …