wiki:PloneDontRemoveUtilities

To avoid removing local utilities on a reinstall.

 http://paste.plone.org/21780

 http://paste.plone.org/21781

 http://blog.m3r.nl/personal/how-to-stop-quickinstaller-from-removing-content

In Extensions/Install?.py

import logging
from Products.CMFCore.utils import getToolByName

logger = logging.getLogger('icat.metadata.Install')
from icat.metadata.interfaces import IICATSettings
from icat.metadata.icatconnection import icatSettings
from zope.component import getSiteManager

def beforeUninstall(portal, reinstall=False, product=None, cascade=None):
    """ Make sure that local utilities won't get removed if reinstalling
    """
    logger.info("calling beforeUninstall")
    if reinstall:
        cascade.remove('utilities')
    return None, cascade


def install(portal, reinstall=False):
    logger.info("calling install")
    # register local utility (not using GS b/c then it gets clobbered on reinstall)
    if not reinstall:
        sm = getSiteManager()
        sm.registerUtility(icatSettings(), provided=IICATSettings)
        setup_tool = getToolByName(portal, 'portal_setup')

    setup_tool = getToolByName(portal, 'portal_setup')

    if hasattr(setup_tool, 'runAllImportStepsFromProfile'):
        setup_tool.runAllImportStepsFromProfile('profile-icat.metadata:default', purge_old=False)
    else:
        old_context = setup_tool.getImportContextID()
        setup_tool.setImportContext('profile-icat.metadata:default')
        setup_tool.runAllImportSteps()
        setup_tool.setImportContext(old_context)