2016-11-18 2 views
0

J'utilise qt installer framework pour créer l'installateur. Lors de l'installation, j'ai appelé component.addOperation("Mkdir", dataDir); // dataDir is a dataLocationDir like C:\Users\Stranger\AppData\Local\MyAppName Lorsque mon programme installé fonctionnait et mettait des dossiers et des fichiers dans le répertoire dataLocationDir, l'étape UNDO de l'opération "Mkdir" ne fonctionnait pas correctement lorsque je procédais à la désinstallation. J'essayez d'utiliser la commande « Exécuter » comme ceci: component.addOperation("Execute", "mkdir " + dataDir, "UNDOEXECUTE", "del /S /F" + dataDir); et aussi j'ai essayé component.addOperation("Execute", "cmd /C mkdir " + dataDir, "UNDOEXECUTE", "cmd /C del /S /F" + dataDir); mais ces méthodes résilie avec l'erreur « Impossible de démarrer: « mkdir my/path »(Aucun programme défini) » Qt programme d'installation Annuler les opérations Mkdir

+0

Certains progrès, mais cela ne fonctionne toujours pas. Maintenant j'écris: component.addOperation("Execute", "cmd", "/C", "mkdir", dataDir, "UNDOEXECUTE", "cmd ", "/C", "rmdir", "/S", /Q", dataDir);. Mais il retourne le message d'erreur "Échec de l'exécution (code de sortie inattendu 1): cmd/C mkdir C: \ Utilisateur \ Staranger \ AppData \ Local \ MyPath" –

Répondre

0

Vous avez dit vous avez essayé tous les deux

component.addOperation("Execute", "mkdir " + dataDir, "UNDOEXECUTE", "del /S /F" + dataDir); 

et

component.addOperation("Execute", "cmd", "/C", "mkdir", dataDir, "UNDOEXECUTE", "cmd ", "/C", "rmdir", "/S", /Q", dataDir); 

Je pense que la bonne façon est le premier, avec la syntaxe des s econd:

component.addOperation("Execute", "mkdir", dataDir, "UNDOEXECUTE", "del", "/S", "/F", dataDir); 

Le premier n'a pas fonctionné car vous devez séparer l'exécutable des arguments. Si Qt obtient une seule chaîne, il suppose que c'est le chemin complet de votre exécutable. La seconde devrait fonctionner, puisque vous pouvez exécuter (dans un cmd par exemple) "cmd/c mkdir yourPath" et cela fonctionne comme prévu. Quoi qu'il en soit, j'ai testé et utilisé la solution que je propose. Si cela ne fonctionne pas, assurez-vous d'échapper correctement à vos antislashs sur votre chemin.

0

J'ai rencontré le même problème.

En résumé, il semble que les opérations sur les répertoires de QtIFW soient boguées.

Sous Windows, je l'ai résolu de cette façon:

  1. J'ai créé un fichier batch qui gère un argument d'entrée « ajouter » lors de l'installation et un argument d'entrée « supprimer » lorsque, pendant la désinstallation.
  2. Je l'ai mis dans le fichier de ressources du programme d'installation.
  3. Dans le constructeur du composant que je me déplace ce script dans le répertoire d'installation:

    installer.performOperation ("Copier", [ ": //myfile.bat", installer.value ("TargetDir") ]);

  4. Dans createOperations de composants il y a:

    component.addOperation ("Exécuter", [ "cmd", "/ c", "@TargetDir @ \\ myfile.bat", "ajouter", " workingDirectory = @ TargetDir @ "," UNDOEXECUTE "," cmd ","/c "," @TargetDir @ \\ monfichier.bat "," supprimer "," workingDirectory = @ TargetDir @ "]);

  5. En finishPageCallback du contrôleur éleminez le lot de cette façon:

    installer.performOperation ("Supprimer", installer.value ("TargetDir") + "\\ myfile.bat"));

0

Ceci est un installateur error dans le fonctionnement de l'opération Mkdir. J'ai contourné cela en utilisant le script du contrôleur.

Controller.prototype.FinishedPageCallback = function() 
{ 
    if (installer.isUninstaller() && installer.status == QInstaller.Success) { 

     var pathToconfigMyapp = QDesktopServices.storageLocation(QDesktopServices.GenericDataLocation) + "\\Myapp"; 


     if(installer.fileExists(pathToconfigMyapp) === true){ 
      installer.executeDetached("cmd",["/c", "rd", "/q", "/s", pathToconfigMyapp]); 
     } 

     gui.clickButton(buttons.FinishButton); 
    }