Как Записать в Пользователя. Файл конфигурации через ConfigurationManager?

Я пытаюсь сохранить пользовательские настройки к использованию конфигурационного файла ConfigurationManager.

Я хочу определить объем этих настроек пользователю только, потому что изменения приложений не могут быть сохранены на Vista/Победе 7 без административных привилегий.

Это, кажется, получает меня конфигурация пользователя, которая, кажется, сохраняется здесь в Win 7 ([Диск]:\Users \[Имя пользователя] \AppData\Local \[ApplicationName] \[AssemblyName] [хеш] \[Версия \)

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);

Каждый раз, когда я пытаюсь сохранить любые изменения вообще в этой конфигурации, я получаю это исключение:

InnerException: System.InvalidOperationException
Message="ConfigurationSection properties cannot be edited when locked."
Source="System.Configuration"
StackTrace:
    at System.Configuration.SectionInformation.VerifyIsEditable()
    at System.Configuration.MgmtConfigurationRecord.GetConfigDefinitionUpdates(Boolean requireUpdates, ConfigurationSaveMode saveMode, Boolean forceSaveAll, ConfigDefinitionUpdates& definitionUpdates, ArrayList& configSourceUpdates)

Я попытался добавить пользовательский ConfigurationSection к этой конфигурации. Я попытался добавить к AppSettingsSection. Каждый раз, когда я звоню config.Save() это выдает исключение выше.

Какие-либо идеи?

Я пытался использовать класс ApplicationSettingsBase через Проект-> разработчик Настроек, но не кажется, что можно сохранить пользовательские типы с этим. Я хочу схожую функциональность со способностью сохранить пользовательские типы.

11
задан johnnyRose 31 May 2017 в 13:52
поделиться

1 ответ

Вам необходимо установить значение SectionInformation.AllowExeDefinition для раздела:

 Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming);
UserSettings settings;
if ((settings = (UserSettings)configuration.Sections[GENERAL_USER_SETTINGS]) == null)
{
      settings = new UserSettings();
      settings.SectionInformation.AllowExeDefinition =   
                 ConfigurationAllowExeDefinition.MachineToLocalUser;
      configuration.Sections.Add(GENERAL_USER_SETTINGS, settings);
      configuration.Save();
}

Значение по умолчанию - ConfigurationAllowExeDefinition.MachineToApplication, которое позволяет размещать раздел только на компьютере .config и app.exe.config.

8
ответ дан 3 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: