Как удалить / очистить файлы AppData/Roaming/MyFolder во время удаления с помощью фреймворка qt installer?

Я создаю приложение, используя каркас установщика qt. Теперь удаление моего приложения не приводит к удалению папки AppData/Roaming/My app. Поэтому я попытался мой собственный код для удаления, чтобы очистить мои AppData. Но это делает мой установщик не отвечает.

Controller.prototype.FinishedPageCallback = function() {

if (installer.isUninstaller() && installer.status == QInstaller.Success)  
     {    
            var appDataPath = QDesktopServices.storageLocation(QDesktopServices.AppDataLocation) + "\\My app";



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

            gui.clickButton(buttons.FinishButton);
    }  
}

Я также пытался использовать

if(installer.runUninstall === true)    

     { 
         installer.performOperation("Execute" , "cmd" "C:/Users/%USERNAME%/AppData/Roaming/My App", "rd", "/s", "/q");  
     }

Тоже не работает. Я что-то пропустил?

3 ответа

Решение

После тестирования с установщиком операций обнаружил, что Rmdir/ Execute не работает должным образом. Но операция удаления у меня сработала.

installer.performOperation("Delete","@HomeDir@/AppData/Roaming/My App/myfile.txt");  

Я предполагаю, что виновником является пространство между "My" и "App". Предоставьте кавычки в строке:

"\"C:/Users/%USERNAME%/AppData/Roaming/My App\""

В этом ответе есть хороший намек . Чтобы разрешить удаление каталогов, созданных установщиком и обновленных, чем это должно бытьregisterPathForUninstallationметод, используемый с параметромboolean wipe = true, проверьте больше в документации . Итак, скрипт создания установщика может выглядеть следующим образом:

      function Component()
{
    // default constructor
    var programFiles = installer.environmentVariable("ProgramFiles");   
    if (programFiles != ""){
         installer.setValue("TargetDir", programFiles + "/My app");
    }
    var appDataRoaming = installer.environmentVariable("AppData");     
    if (appDataRoaming != ""){
        installer.setValue("DataDir", appDataRoaming + "/My app");
    }
    component.registerPathForUninstallation("@DataDir@", true);
}

Component.prototype.createOperations = function()
{
    try {
        // call the base create operations function
        component.createOperations();
        if (installer.value("os") == "win") { 
            try {
                component.addOperation("CreateShortcut", "@TargetDir@/My app.exe", "@StartMenuDir@/My app.lnk", "workingDirectory=@TargetDir@");                
                component.addOperation("Mkdir", "@DataDir@");
            } catch (e) {
                // Do nothing if key doesn't exist
            }
        }
    } catch (e) {
        print(e);
    }     
}
Другие вопросы по тегам