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

Это довольно понятно. Если P имеет какое-либо значение больше 7 (7 * 4 = 28, макс. 31), значение F_MASK_4_BIT << (P * 4) будет переполнено. Потому что F_MASK_4_BIT является целочисленной константой типа int.

Исправьте это, используя соответствующий тип для целочисленной константы:

#define F_MASK_4_BIT 0xFull
25
задан Blorgbeard 9 April 2014 в 19:33
поделиться

6 ответов

The real complete answer:

The app.config settings are read-only because there are 2 types of settings:

  1. Application Settings
  2. User Settings

The first won't change unless the application publisher publishes a new version of it. The second is not stored in the app.config, but in a user.config file. In the abscence of this user.config file the app.config provides the default value.

If MySetting is a User Setting:

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

It will create a user.config file at [User Local Settings Application Data]\[company name]\[application].exe[hash string]\[version] with the new settings, and those settings will prevail over the settings in the app.config file.

63
ответ дан 28 November 2019 в 18:07
поделиться

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

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

4
ответ дан 28 November 2019 в 18:07
поделиться

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

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

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

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

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

  • ???

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

РЕДАКТИРОВАТЬ: Как локальная система у вас действительно есть права на запись в каталог программных файлов. Если появляется ошибка «Только чтение», это означает, что сами настройки доступны только для чтения. Вам нужно будет использовать менеджер конфигурации, чтобы иметь возможность изменять настройки в файлах конфигурации.

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

3
ответ дан 28 November 2019 в 18:07
поделиться

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

Вы звонили

ConfigurationManager.RefreshSection("appSettings");

и

Configuration.Save();
1
ответ дан 28 November 2019 в 18:07
поделиться

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

0
ответ дан 28 November 2019 в 18:07
поделиться

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

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

0
ответ дан 28 November 2019 в 18:07
поделиться
Другие вопросы по тегам:

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