2016-11-18 5 views
0

Я использую фреймворк qt для создания установщика. На этапе установки я вызвал component.addOperation("Mkdir", dataDir); // dataDir is a dataLocationDir like C:\Users\Stranger\AppData\Local\MyAppName Когда моя установленная программа работала, она помещала некоторые папки и файлы в dataLocationDir, таким образом, операция UNDO в операции «Mkdir» не срабатывала корректно, когда я запускал удаление. Я пытаюсь использовать «Выполнить» команду, как это: component.addOperation("Execute", "mkdir " + dataDir, "UNDOEXECUTE", "del /S /F" + dataDir); , а также я попытался component.addOperation("Execute", "cmd /C mkdir " + dataDir, "UNDOEXECUTE", "cmd /C del /S /F" + dataDir); но это методы отмены с ошибкой «Не удалось запустить:„MKDIR мой/путь“(Нет программы определено)» Qt installer framework undo Операции Mkdir

+0

Некоторый прогресс, но он все еще не работает. Теперь я пишу: component.addOperation("Execute", "cmd", "/C", "mkdir", dataDir, "UNDOEXECUTE", "cmd ", "/C", "rmdir", "/S", /Q", dataDir);. Но оно возвращает сообщение об ошибке «Выполнение не выполнено (неожиданный код выхода 1): cmd/C mkdir C: \ User \ Staranger \ AppData \ Local \ MyPath" –

ответ

0

Вы сказали вы пробовали и

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

и

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

Я думаю, что правильный путь является первым один, с синтаксисом с econd:

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

Первый не работал, потому что вам нужно отделить исполняемый файл от аргументов. Если Qt получает одну строку, предполагается, что это ваш полный путь к исполняемому файлу. Второй, на самом деле, должен работать, поскольку вы можете запускать (например, в cmd) «cmd/c mkdir yourPath», и он работает по назначению. Во всяком случае, я протестировал и использовал решение, которое я предлагаю. Если это не сработает, убедитесь, что вы правильно выбрали обратную косую черту на своем пути.

0

Я столкнулся с той же проблемой.

Вкратце, похоже, что операции с каталогами QtIFW являются ошибками.

Под Windows я решил так:

  1. Я создал пакетный файл, который управляет входным аргументом «добавить» в процессе установки и ввода аргумента «удалить», когда во время деинсталляции.
  2. Я поместил его в файл ресурсов установщика.
  3. В конструкторе компонента я движущемся этот скрипт в директорию установки:

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

  4. В createOperations Компонента есть:

    component.addOperation ("Выполнить", [ "CMD", "/ C", "@TargetDir @ \\ myfile.bat", "добавить", " workDirectory = @ TargetDir @ "," UNDOEXECUTE "," cmd ","/c "," @TargetDir @ \\ myfile.bat "," delete "," workingDirectory = @ TargetDir @ "]);

  5. В finishPageCallback из контроллера я удалить пакет таким образом:

    installer.performOperation ("Удалить", installer.value ("TargetDir") + "\\ myfile.bat"));

0

Это установщик error в операции Mkdir.

Я обошел это, используя скрипт контроллера.

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); 
    } 
Смежные вопросы