Выполнение файла MSI из приложения Qt

Я написал приложение Qt, которое загружает, а затем выполняет файл MSI. Выполнение осуществляется через QProcess и использует информацию, предоставленную в этот вопрос.

Всякий раз, когда я запускаю его, используя QProcess исключение выдается:

Исключение: нарушение прав на чтение

которая кажется проблемой управления правами. Однако я не знаю, где именно проблема и как ее исправить. Вот пример кода:

QProcess *process = new QProcess(this);
QString program = "file.msi";
QString folder = "C:\\Users\\user\\Downloads\\";
process->start(program, QStringList() << folder);

0

Решение

Проблема заключается в том, что MSI-файл является установочным файлом, поэтому он требует прав администратора.

Есть два варианта:

  • попробуйте использовать QDesktopServices::openUrl(QUrl("file:///<path to your MSI file>"), QUrl::TolerantMode)); (как предложено Вот) Вместо того, чтобы использовать QProcess,
  • Используйте Windows runas позвонив QProcess::startDetached("runas /user:<localmachinename>\user msiFileName"); где вы заменяете соответствующие строки своими (для этого вы должны проверить документация runas так как это не имеет ничего общего с Qt, но с аргументами командной строки runas,

Кроме того, вы можете запустить ваше приложение Qt с правами администратора. Для того, чтобы сэкономить пользователю рубль, сделав это вручную, вы можете использовать этот чтобы сказать Windows, каким должно быть выполнение по умолчанию вашего приложения Qt. Я бы не советовал этого делать, потому что ваше приложение может привести к бреши в системе, за которую вы можете быть привлечены к ответственности.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]