2017-08-14 9 views
0

J'ai écrit une application Qt qui télécharge puis exécute un fichier MSI. L'exécution est effectuée via QProcess et utilise les informations fournies dans this question.Exécution d'un fichier MSI à partir d'une application Qt

Chaque fois que je le lance à l'aide QProcess une exception est levée:

Exception lancée: lire violation d'accès

qui semble être un problème de gestion des droits. Cependant je ne sais pas où le problème est exactement et comment le réparer. Voici un exemple d'extrait de code:

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

Affiche un bref exemple du code que vous utilisez pour cela. Nous ne pouvons pas résoudre les bogues dans le code que nous ne pouvons pas voir. – drescherjm

+0

J'ai donné un lien et c'est exactement comme indiqué. – Cherple

+0

Il ne devrait pas ce problème en utilisant QProcess. Vous avez probablement un bug dans votre code ou un conflit dll. Nous ne pouvons pas aider non plus si nous ne pouvons pas reproduire. Je peux vous assurer que j'utilise QProcess dans plusieurs de mes applications et qu'aucun d'entre eux ne le fait. – drescherjm

Répondre

1

Le problème provient du fait qu'un fichier MSI est un fichier d'installation, ce qui nécessite des privilèges d'administrateur.

Il y a deux options:

  • essayer d'utiliser QDesktopServices::openUrl(QUrl("file:///<path to your MSI file>"), QUrl::TolerantMode)); (comme l'a suggéré here) au lieu d'utiliser QProcess.
  • Utilisez Windows runas en appelant QProcess::startDetached("runas /user:<localmachinename>\user msiFileName"); où vous remplacez les cordes respectives avec votre propre (pour que vous devriez vérifier le documentation of runas car cela n'a rien à voir avec Qt, mais avec les arguments de ligne de commande de runas.

En outre, vous pouvez exécuter votre application Qt avec des privilèges d'administrateur.Pour économiser l'utilisateur le rouble de le faire manuellement, vous pouvez utiliser this pour dire à Windows ce que l'exécution par défaut de votre application Qt est censé être. contre parce que votre application peut introduire une violation de la sécurité dans le système dont vous pouvez être tenu responsable

+0

Merci, cela a résolu le problème. – Cherple