[英]How to modify Grid RowDefinitions and ColumnDefinitions in WPF during runtime?
[英]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.