Qt安装程序框架撤消Mkdir操作

时间:2016-11-18 13:54:08

标签: qt undo qt-installer

我使用qt安装程序框架来创建安装程序。在安装步骤中,我调用了 component.addOperation("Mkdir", dataDir); // dataDir is a dataLocationDir like C:\Users\Stranger\AppData\Local\MyAppName 当我安装的程序工作时,它将一些文件夹和文件放入dataLocationDir,这样,当我运行卸载时,“Mkdir”操作的UNDO步骤无法正常工作。我尝试使用“执行”命令,如下所示: 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 my / path'(没有程序定义)”  

3 个答案:

答案 0 :(得分: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);

我认为正确的方法是第一种,使用第二种语法:

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

第一个没有用,因为你必须将可执行文件与参数分开。如果Qt获得单个字符串,则假定它是您的可执行完整路径。 第二个实际上应该可以工作,因为你可以运行(例如在一个cmd中)" cmd / c mkdir yourPath"它按预期工作。无论如何,我已经测试并使用了我提出的解决方案。如果它不起作用,请确保在路径中正确地逃避反斜杠。

答案 1 :(得分:0)

我遇到了同样的问题。 简而言之,看起来QtIFW目录上的操作是错误的。 在Windows下我用这种方式解决了: 我创建了一个批处理文件来管理输入参数"添加"在安装过程中输入参数"删除"在卸载期间。 我把它放在安装程序的资源文件中。 在组件的构造函数中,我将此脚本移动到安装目录: installer.performOperation(" Copy",["://myfile.bat" ;, installer.value(" TargetDir")]); 在Component的createOperations中有: component.addOperation("执行",[" cmd"," / c"," @TargetDir @ \\ myfile.bat",& #34;添加"," workingDirectory = @ TargetDir @"," UNDOEXECUTE"," cmd"," / c", " @TargetDir @ \\ myfile.bat","删除"," workingDirectory = @ TargetDir @"]); 在Controller的finishPageCallback中,我以这种方式删除批处理: installer.performOperation("删除",installer.value(" TargetDir")+" \\ myfile.bat"));

答案 2 :(得分:0)

这是Mkdir操作操作中的安装程序error

我使用控制器脚本解决了这个问题。

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);
    }