Я написал пользовательский раздел конфигурации, коллекцию и элемент для добавления/изменения в свой app.config. Кажется, все идет хорошо, и он отлично работает в Visual Studio. Однако, при установке приложения и приходит время, чтобы сохранить новые данные в разделе пользовательских конфигурации, следующее исключение:Пользовательский раздел конфигурации может быть сохранен/изменен только при запуске как администратор?
System.Configuration.ConfigurationErrorsException: Unable to save config to file '{path to config file}'
Самое интересное в том, что если я запустить приложение в режиме администратора, все работает отлично. Есть ли причина, по которой он будет работать только как администратор?
EDIT:
я должен отметить, что я не думаю, что его вопрос а permissons потому что а) у нас есть другие приложения, которые модифицируют <applicationSettings>
их app.configs просто отлично там, и б) log4net способен чтобы написать свой файл журнала просто отлично.
Пользовательские Config Element:
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; }
}
}
Пользовательские конфигурации Раздел:
[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);
}
}
}
Пользовательские конфигурации Раздел
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();
}
}
Куда вы пишете? Где физически? Имеет ли пользователь, выполняющий ваше приложение, разрешение на запись там? – mariocatch
Я думаю, это может помочь вам [Как получить права администратора для редактирования app.config в C#?] (Http://stackoverflow.com/questions/3147171/how-to-get-admin-privileges-for-editing-app -config-in-c) –
@mariocatch Запись в ProgramData, но другие приложения в нашем пакете изменят файлы конфигурации, которые просто хранятся там. Есть ли разница между измененным разделом (который работает для других наших приложений) и специальным разделом с разрешениями? Кроме того, мое приложение использует log4net, который, похоже, не имеет проблемы с записью журнала в это место. –
Hershizer33