在app.config中设置值-对程序文件没有写访问权限

本文关键字:文件 程序 权限 写访问 config app 设置 | 更新日期: 2023-09-27 18:08:59

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

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

然而,MyProgramName.config文件总是存储在程序文件夹中,根据文档(https://msdn.microsoft.com/de-de/library/system.configuration.configurationuserlevel%28v=vs.110%29.aspx)

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

现在让我们假设我有一些用户不能写入C:'Program Files(x86)'...(这是win7上非管理员用户的默认设置)。是否有一种方法可以正确使用app.config文件,或者将其放在%APPDATA%文件夹中?

在app.config中设置值-对程序文件没有写访问权限

您可以使用应用程序设置api的用户设置功能。这些设置存储在%userprofile%'appdata'local%userprofile%'Local Settings'Application Data中(依赖于windows版本)。

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

你基本上只需要添加一个.settings文件,它在你的app.config中创建applicationSettings和/或userSettings部分(参见MSDN:如何:在设计时创建新设置),创建你的属性并将其设置为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:使用应用程序设置和用户设置

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