2014-02-14 3 views
2

Вид вопроса с двумя частями.Изменение каталога App.config в каталоге программ

Я разработал приложение, которое читает и записывает в App.config. Приложение установлено в Program Files установщиком MSI.

Он отлично работает на моем компьютере Win7, но у меня есть пользователи на Win7, которые получают Access Denied при записи на этот App.config.

Я пишу к app.config, используя код ниже:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings["Endpoint"].Value = endpointTxtBox.Text; 
config.Save(ConfigurationSaveMode.Modified); 
  1. Почему я не получаю эту проблему на моем компьютере развития? Я пробовал как с локальным администратором, так и с обычной учетной записью локального пользователя.

  2. Как переместить App.config в незащищенный каталог?

+0

проверить это объяснение -> http://superuser.com/questions/321502/why-does-chrome-install-itself-under-user-directory-instead-of-program-files – rt2800

+1

Я уверен, что это потому, что вы являетесь администратором вашей машины, но пользователи не являются админами на своих http://stackoverflow.com/questions/7654780/why-does-config-appsettings-settingsmysetting-value-fail-in-windows-7- но-n –

+0

Будет ли этот 'ConfigurationManager.AppSettings.Set (« Конечная точка », endpointTxtBox.Text)« сделать то же самое для вас? И Идея. Когда пользователи запускают ваше приложение, попробуйте щелкнуть правой кнопкой мыши и сделать «Запуск от имени администратора» - он может работать –

ответ

2

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

Проверить эту ссылку для подробностей:

http://msdn.microsoft.com/en-us/library/8eyb2ct1(v=vs.110).aspx

Обратите внимание, что делает использование сильно типизированного класса настройки .NET, а не сырым, более слабо типизированных AppSettings NameValueCollection. (Однако настройки все равно сохраняются в app.config.)

Вы можете создать файл настроек в VS (шаблон называется «Файл настроек» в VS).

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

1) Во-первых: файл .settings. Дизайнер VS позволяет вам определять параметры вашего приложения, их типы и их области (например, пользователь или приложение). Это файл, который дизайнер изменяет, когда пользователь пользователь дизайнер, но изменения конфигурации времени выполнения никогда не будут записаны в этот файл. Он определяет настройки вашего приложения и их значения по умолчанию. Вот и все. Сначала я не понял, когда пытался обернуть голову файлами настроек.

Также обратите внимание, что для действия сборки файла .settings установлено значение SettingsSingleFileGenerator.

2) Файл .designer.cs. VS/MSBuild генерирует этот файл во время сборки для вас, потому что для действия сборки в файле .settings задано значение SettingsSingleFileGenerator. Класс, который он создает, представляет собой строго типизированную оболочку для ваших свойств конфигурации, и вы можете использовать ее одинаково хорошо для своих облачных приложений и облачных областей.

3) Параметры времени выполнения, которые обертывают классы настроек, все еще хранятся в app.config.

4) Пользовательские настройки хранятся под папкой AppData \ Local этого пользователя, чтобы иметь полные права на чтение и запись.

0

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

  1. Внешняя часть вашей конфигурации используется с помощью атрибута configSource. Вы храните всю AppSettings раздел, например, в виде отдельного файла, делая это:

    <appSettings configSource="....\file.config" />

    Вот документы для этой функции: http://msdn.microsoft.com/en-us/library/ms228154(v=vs.85).aspx

  2. Я считаю, вы можете вручную загрузить конфиг файл в любом месте, используя класс System.Configuration.ConfigXmlDocument. Постройте один, используя конструктор no-arg, а затем вызовите его метод Load(String filename).

  3. Сохраните конфигурацию в реестре, а не в файловой системе, внедрив собственный файл SettingsProvider.

Смежные вопросы