在app.config中设置值 - 没有对Program Files的写访问权限

时间:2015-08-21 08:55:19

标签: c# .net app-config

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

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//update values in config.AppSettings...
config.Save(ConfigurationSaveMode.Modified);

但根据文档(https://msdn.microsoft.com/de-de/library/system.configuration.configurationuserlevel%28v=vs.110%29.aspx

MyProgramName.config文件总是存储在程序文件夹中
  

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用应用程序设置API的用户设置功能。这些设置存储在%userprofile%\appdata\local%userprofile%\Local Settings\Application Data中(取决于Windows版本)。

用户设置有一些限制:正如所说的那样,用户特定的并非所有用户都是全局的 - 但是如果你在运行时更新值,那么这就是你想要的,否则你需要一些like this

您基本上只需要添加.settings文件,该文件会在您的app.config中创建applicationSettings和/或userSettings部分(请参阅MSDN: How To: Create a New Setting at Design Time),创建您的媒体资源并设置它到User,而不是Application,然后在运行时执行此操作:

Properties.Settings.Default.myColor = Color.AliceBlue;
Properties.Settings.Default.Save();

.settings属性将在app.config中创建一个用户设置条目,如下所示:

<setting name="Setting1" serializeAs="String" >
 <value>My Setting Value</value>
</setting>

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

参考:MSDN: Using Application Settings and User Settings

答案 1 :(得分:1)

存储在app.config中的数据不适合在运行时由普通用户更改。除了这个代码位于某个配置应用程序的admin之外,不要编写重写Aqua的代码。改为使用应用程序设置。