Подтвердить что ты не робот

Почему настройки приложения доступны только для чтения в app.config?

У меня есть некоторые настройки в моем app.config, который я намереваюсь быть глобальным, т.е. любой пользователь может их изменить, и все пользователи получают одинаковые настройки.

Но если я не изменю их на пользовательские настройки, они будут считаны только.

Почему это?

И как мне следует продолжать сохранение глобальных настроек приложения?

Edit:

Это приложение для Windows, которое работает как служба LocalSystem. Он также может запускаться вручную локальным администратором с аргументом "/config", который запускает форму окна для редактирования значений конфигурации.

Таким образом, в обеих ситуациях он будет иметь доступ к записи %PROGRAMFILES%.

Таким образом, я получаю доступ к моим настройкам:

Settings.Default.MySetting = MyNewValue;

И когда для MySetting установлено приложение (в моих свойствах проекта, Settings.settings), я получаю ошибку времени компиляции "MySetting только для чтения".

Я новичок в этом материале и еще не нашел очень хорошего объяснения того, как это должно быть сделано. Например, почему мне нужно сказать "Default", и что это значит? Понятия не имею. Если кто-нибудь может указать мне на учебник по использованию app.config, это будет действительно полезно.

4b9b3361

Ответ 1

Реальный полный ответ:

Настройки app.config доступны только для чтения, поскольку есть два типа настроек:

  • Настройки приложения
  • Настройки пользователя

Первое не изменится, если издатель приложения не опубликует новую версию. Второй не сохраняется в app.config, но в файле user.config. В отсутствие этого файла user.config app.config предоставляет значение по умолчанию.

Если MySetting является пользовательской установкой:

Settings.Default.MySetting = MyNewValue;
Settings.Default.Save();

Он создаст файл user.config в [User Local Settings Application Data]\[company name]\[application].exe[hash string]\[version] с новыми настройками, и эти настройки будут преобладать над настройками в файле app.config.

Ответ 2

Почему: Параметры приложения предназначены для хранения в папке "Приложение" в разделе "Программы", где у пользователя нет привилегий записи.

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

Ответ 3

Проще говоря: на машине нет места, которое каждый может изменить, если вы не дадите ему привилегий.

Существует несколько способов справиться с такой ситуацией:

  • Вы можете создать файл конфигурации/некоторые параметры реестра, поместить его в профиль "все пользователи" и предоставить "Каждому" права на изменение этого конкретного файла. Во время установки вы можете автоматизировать процедуру предоставления соответствующих привилегий, и ваша программа может справиться с остальными.

  • Вы можете использовать UAC, чтобы убедиться, что текущий пользователь имеет соответствующие привилегии для изменения общесистемного параметра. Это рекомендуемый подход, но также означает, что не все могут изменять определенные настройки.

  • Вы можете использовать общую базу данных и хранить свои настройки там.

  • ???

Я бы не рекомендовал менять элементы в каталоге файлов программ или изменять привилегии по умолчанию.

EDIT: как локальная система, вы действительно пишете права на каталог программных файлов. Если вы получаете ошибку "Только для чтения", это означает, что сами настройки доступны только для чтения. Вам нужно будет использовать диспетчер конфигурации, чтобы иметь возможность изменять настройки в файлах конфигурации.

Надеюсь, что это поможет.

Ответ 4

Не совсем уверен, что вы имеете в виду здесь. Вы имеете в виду, что вы разрешили пользователям изменять app.config из пользовательского интерфейса, и изменения не сохраняются?

Вы звонили

ConfigurationManager.RefreshSection("appSettings");

и

Configuration.Save();

Ответ 5

Одна из причин заключается в том, что файл app.config находится в папке вашего приложения в каталоге Program Files, и все файлы Program Files по умолчанию читаются только для стандартных пользователей.

Другим является то, что параметры app.config применяются к системе в целом. Если один пользователь внесет изменения, это повлияет на других пользователей. Обычные пользователи не должны делать такие изменения. Все, что может воздействовать на нескольких пользователей, должно быть установлено только системным администратором. Настройки для каждого пользователя относятся к каждой папке Application Data.

Ответ 6

Настройки конфигурации кэшируются в памяти при запуске приложения. вы можете обрабатывать файл app.config как xml для изменения значений.