C# 在app.config中设置值-对程序文件无写访问权限

C# 在app.config中设置值-对程序文件无写访问权限,c#,.net,app-config,C#,.net,App Config,我想在运行时更改我的app.config文件(或者更确切地说是MyProgramName.config文件)中的值。这可以很好地使用 System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); //update values in config.AppSettings... config.Save(ConfigurationS

我想在运行时更改我的
app.config
文件(或者更确切地说是
MyProgramName.config
文件)中的值。这可以很好地使用

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//update values in config.AppSettings...
config.Save(ConfigurationSaveMode.Modified);
但是,根据文档()

应用程序配置文件与应用程序位于同一目录中,具有相同的名称,但扩展名为.config。例如,C:\System\Public.exe的配置文件是C:\System\Public.exe.config


现在,假设我有一些用户无法写入
C:\ProgramFiles(x86)\…
(这是win7上非管理员用户的默认设置)。是否有办法继续正确使用app.config文件或将其放在%APPDATA%文件夹中?

存储在
app.config
中的数据不允许普通用户在运行时更改。不要编写重新写入
app.config
的代码,除非该代码位于某个管理员配置应用程序中。请改用应用程序设置。

您可以为此使用应用程序设置api的用户设置功能。这些设置存储在
%userprofile%\appdata\local
%userprofile%\local settings\Application Data
中(取决于windows版本)

用户设置有一些限制:正如它所说的,它是特定于用户的,不是所有用户的全局设置——但假设您正在运行时更新值,那么这就是您想要的,否则您需要一些东西

基本上,您只需添加一个.settings文件,该文件在app.config(请参阅)中创建
应用程序设置
和/或
用户设置
部分,创建属性并将其设置为
用户
,而不是
应用程序
,然后在运行时执行此操作:

Properties.Settings.Default.myColor = Color.AliceBlue;
Properties.Settings.Default.Save();
.settings属性将在app.config中创建如下所示的用户设置条目:


我的设定值
您可以使用此设置在保存任何用户特定值之前用户会话将获得的默认值

参考: