Как удалить / очистить файлы 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);
}
}