2016-11-18 52 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安裝程序框架撤消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); 

我認爲正確的做法是第一位的,隨着S的語法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( 「複製」,[ 「://myfile.bat」,installer.value( 「TARGETDIR」) ]);

  4. 在組件的createOperations有:

    component.addOperation( 「執行」,[ 「CMD」, 「/ C」, 「@ @TargetDir \\ myfile.bat」, 「添加」,「 workingDirectory = @ 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); 
    }