A seção de configuração personalizada só pode ser salva / modificada durante a execução como administrador?

Eu escrevi uma seção de configuração personalizada, coleção e elemento para adicionar / modificar no meu app.config. Tudo parece estar indo bem e funciona perfeitamente no Visual Studio. No entanto, quando instalo o aplicativo e chega a hora de salvar os novos dados na seção de configuração personalizada, a seguinte exceção é lançada:

System.Configuration.ConfigurationErrorsException: Unable to save config to file '{path to config file}'

A parte interessante é que, se eu executar o aplicativo no modo de administrador, tudo funcionará bem. Existe algum motivo para que ele funcione apenas como administrador?

EDITAR:

Devo observar que não acho que seja um problema de permissão porque: a) temos outros aplicativos que modificam o<applicationSettings> de seus app.configs bem lá eb) log4net é capaz de escrever seu arquivo de log muito bem lá.

Elemento de configuração personalizado:

public class AuditorColorElement : ConfigurationElement
{
    public AuditorColorElement()
    {
    }

    public AuditorColorElement(Color color, string auditor)
    {
        Color = color;
        Auditor = auditor;
    }

    [ConfigurationProperty(nameof(Color), IsRequired = true, IsKey = true)]
    public Color Color
    {
        get { return (Color)base[nameof(Color)]; }
        set { this[nameof(Color)] = value; }
    }

    [ConfigurationProperty(nameof(Auditor), IsRequired = true)]
    public string Auditor
    {
        get { return (string)base[nameof(Auditor)]; }
        set { this[nameof(Auditor)] = value; }
    }
}

Seção de configuração personalizada:

[ConfigurationCollection(typeof(AuditorColorElement))]
public class AuditorColorElementCollection : ConfigurationElementCollection, IEnumerable<AuditorColorElement>
{
    internal const string PropertyName = "AuditorColors";

    public AuditorColorElementCollection() : base()
    {
    }

    public AuditorColorElementCollection(AuditorColorElementCollection collection)
    {
        foreach (AuditorColorElement element in collection)
        {
            Add(element);
        }
    }

    public override ConfigurationElementCollectionType CollectionType
    {
        get
        {
            return ConfigurationElementCollectionType.AddRemoveClearMapAlternate;
        }
    }

    protected override string ElementName
    {
        get
        {
            return PropertyName;
        }
    }

    public AuditorColorElement this[int idx]
    {
        get { return (AuditorColorElement)BaseGet(idx); }
    }

    protected override bool IsElementName(string elementName)
    {
        return elementName.Equals(PropertyName,
        StringComparison.InvariantCultureIgnoreCase);
    }

    public override bool IsReadOnly()
    {
        return false;
    }

    protected override ConfigurationElement CreateNewElement()
    {
        return new AuditorColorElement();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((AuditorColorElement)(element)).Color;
    }

    public void Add(AuditorColorElement element)
    {
        BaseAdd(element);
    }

    public void Clear()
    {
        BaseClear();
    }

    public void Remove(AuditorColorElement element)
    {
        BaseRemove(element.Color);
    }

    public void RemoveAt(int index)
    {
        BaseRemoveAt(index);
    }

    public void Remove(Color color)
    {
        BaseRemove(color);
    }

    public object GetKey(object key)
    {
        return BaseGet(key);
    }

    public bool ContainsKey(object key)
    {
        return GetKey(key) != null ? true : false;
    }

    public new IEnumerator<AuditorColorElement> GetEnumerator()
    {
        foreach (var key in this.BaseGetAllKeys())
        {
            yield return (AuditorColorElement)BaseGet(key);
        }
    }
}

Seção de configuração personalizada

public class AuditorColorSection : ConfigurationSection
{
    [ConfigurationProperty(nameof(AuditorColors), IsRequired = true, IsDefaultCollection = true)]
    [ConfigurationCollection(typeof(AuditorColorElementCollection),
        AddItemName = "add",
        ClearItemsName = "clear",
        RemoveItemName = "remove")]
    public AuditorColorElementCollection AuditorColors
    {
        get { return ((AuditorColorElementCollection)(base[nameof(AuditorColors)])); }
        set { base[nameof(AuditorColors)] = value; }
    }

    public AuditorColorSection()
    {
        AuditorColors = new AuditorColorElementCollection();
    }
}

questionAnswers(1)

yourAnswerToTheQuestion