WPF - Изменить настройки конфигурации во время выполнения - PullRequest
1 голос
/ 28 февраля 2020

Я создаю приложение WPF. Он отлично работает в Visual Studio. Но всякий раз, когда я изменяю параметры конфигурации через приложение после установки, выдается ошибка «Произошла ошибка при загрузке файла конфигурации: доступ к пути c: \ Program Files (x86) \… запрещен». Я не могу запускать программу от имени администратора каждый раз согласно требованию. Есть ли способ решить эту проблему?

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");connectionStringsSection.ConnectionStrings["cn"].ConnectionString = "data source=" + txtServer.Text + ";database=" + txtDatabase.Text + ";User ID=" + txtUserID.Text + ";Password=" + pwdPassword.Password;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("connectionStrings");

config.Save(ConfigurationSaveMode.Modified);

// Force a reload of the changed section.
ConfigurationManager.RefreshSection("appSettings");

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Правило большого пальца : Treat your installation folder under program files as read-only.

Вот и все, что нужно сделать. У меня есть этот список подходов для решения проблемы отказа в доступе . Большинство опций там плохие и перечислены, так что можно вспомнить, почему они плохие (я просто обновил связанный ответ с цветом, чтобы указать больше рекомендуемых подходов - он немного грязный, но, по крайней мере, может вызвать идеи).

Go для переместить файл в доступное для записи место или использовать только внутренние значения по умолчанию , или еще лучше читать из облака (базы данных) и записывать в userprofile, если вам нужно.

Традиционный способ - это, очевидно, реестр с записями HKCU .

(мне нравится "управление версиями и резервное копирование настроек" стало возможным благодаря хранению настроек в базе данных, а не только файлам настроек - но больше работы).

1 голос
/ 28 февраля 2020

UA C не позволит пользователю изменять что-либо внутри программных файлов. Это то, что вызывает вашу ошибку.

https://social.technet.microsoft.com/wiki/contents/articles/30915.c-local-files.aspx

Ваши альтернативы включают:

Явно измените авторизацию для папки, в которой развернут конфигурационный файл к. Это широко считается очень плохой практикой. Забудьте, что вы распространяете на внешних клиентов.

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

Последний - подход, который я рекомендовал бы.

Создание класса который подходит для хранения ваших данных.

Сериализуйте это в строку и сохраните как файл xml или json в appdata.

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