Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QtIFW 3.0/Windows: How to create an installer that doesn't create and register a MaintenanceTool ?



  • <tl/dr>
    Due to special requirements I'm trying to create an installer with QtIFW 3.0 that does not create a MaintenanceTool and doesn't register it in the Windows registry.

    Long Version
    I created a framework (custom QML types and C++ classes) for a customer. Due to special requirements of the customer it must be installed into a certain directory structure. There can be several versions of the framework in that directory structure:

    <InstallationTargetDirectory>
            | 
            |- MyFramework_Qt<version>_mingw<version>
            |            |- 2.0.0
            |            |        |- include
            |            |        |- lib
            |            |          ...
            |            |- 2.0.1
            |                     |- include
            |                     |- lib
            |                    ...
            |- MyFramework_Qt<version>_linux  
            |            |- 2.0.0
           ...          ...                            
    

    InstallationTargetDirectory is chosen by the user and all versions of the framework are to be installed into that directory. But there is one installer for each platform/version-combination (one installer for MyFramework 2.0.0 for Qt<version> MinGW<version>, another one for MyFramework 2.0.1 for Qt<version> MinGW<version> and another one for MyFramework 2.0.0 for Qt<version> Linux). Putting all versions into one Installer is not an option due to the way the project is built.

    Unfortunately the Qt Installer Framework generates an MaintenanceTool and puts it into InstallationTargetDirectory, so installing more than one version into that directory overwrites the components.xml and repository.xml of previously installed version. Those versions cannot be uninstalled anymore, as the associated MaintenanceTool executable misses the necessary information. Also uninstalling a version should be as easy as removing the associated directory.

    Additionally the installer registers the path to the MaintenanceTool in the Windows registry. Simply deleting the version directory leaves that key in the registry, leading to a long list of "MyFramework" entries in the Windows Settings -> Apps category that cannot be removed (without the uninstaller executable the entry in Apps cannot be removed except by removing the registry keys).

    So my question is: is there a way to create an installer that doesn't create and register a MaintenanceTool?