繁体   English   中英

WPF - 在运行时修改配置设置

[英]WPF - Modify Configuration settings during runtime

我正在创建一个 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");

UAC 将阻止用户更改程序文件中的任何内容。 这就是引起您错误的原因。

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

您的替代方案包括:

显式更改配置部署到的文件夹的授权。 这被广泛认为是非常糟糕的做法。 忘记这是您分发给外部客户的。

不要为这些变量使用配置文件,而是将它们写入 appdata 中的文件。 如果这是多用户安装,您可以使用公共应用数据,或者您可以使用用户的应用数据。

后者是我推荐的方法。

构建一个适合保存数据的类。

将其序列化为字符串并另存为 xml 或 json 文件到 appdata 中。

经验法则Treat your installation folder under program files as read-only

这就是它的全部内容。 我有这个处理访问被拒绝的方法列表 那里的大多数选项都不好并列出来,所以人们可以记住它们为什么不好(我只是用颜色更新了链接的答案以指示更多推荐的方法 - 这有点混乱,但至少它可以激发想法)。

将文件移动到可写位置,或使用内部默认值,或者最好从云(数据库)读取并在需要时写入用户配置文件。

传统方式显然是带有 HKCU 条目的注册表

(我喜欢通过设置的数据库存储而不是仅设置文件实现的“设置的版本控制和备份” ——尽管还有更多的工作)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM