修改Program Files目录中的App.config

时间:2014-02-14 11:30:47

标签: c# .net app-config

有两个问题。

我开发了一个应用程序,可以读取和写入App.config。 该应用程序由我的MSI安装程序安装在Program Files中。

它在我的Win7计算机上工作正常,但我在Win7上的用户在写入此App.config时会被拒绝访问。

我使用以下代码写入app.config:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["Endpoint"].Value = endpointTxtBox.Text;
config.Save(ConfigurationSaveMode.Modified);
  1. 为什么我的开发电脑上没有出现此问题?我已尝试使用本地管理员和普通本地用户帐户。

  2. 如何将App.config重定位到不受保护的目录?

2 个答案:

答案 0 :(得分:2)

卡瑟尔,   您不必移动app.config以便让用户保存其应用程序设置; .NET已经支持在用户可写的存储中保存用户范围的应用程序设置!您甚至可以在app.config文件中指定默认用户设置。

查看此链接了解详情:

http://msdn.microsoft.com/en-us/library/8eyb2ct1(v=vs.110).aspx

请注意,使用强类型的.NET设置类而不是原始的,更弱类型的AppSettings NameValueCollection。 (但是,设置仍然可以存储在app.config中。)

您可以在VS中创建设置文件(该模板在VS中称为“设置文件”)。

一开始有些事情让我对设置文件感到困惑,所以我想我会指出它们:

1)首先:.settings文件。 VS设计器允许您定义应用程序设置,其类型和范围(即用户或应用程序)。 这是设计人员在使用设计器时修改的文件,但永远不会将运行时配置更改写入此文件。它定义了您的应用设置及其默认值。就是这样。当我试图绕过设置文件时,我起初并没有这样做。

另请注意,.settings文件上的构建操作设置为SettingsSingleFileGenerator。

2).designer.cs文件。 VS / MSBuild会在构建时为您生成此文件,因为.settings文件上的构建操作设置为SettingsSingleFileGenerator。它生成的类是配置属性的强类型包装器,您可以将它同样用于应用程序范围和用户范围的属性。

3)Settings类包装的运行时设置仍存储在app.config中。

4)用户设置存储在该用户的AppData \ Local目录下,以便他们具有完全的读/写权限。

答案 1 :(得分:0)

我还有其他一些想法,如果您真正需要做的是让用户修改所有用户的全局应用程序设置。

  1. 使用configSource属性外部化部分配置。你存储整个 例如,appSettings部分在一个单独的文件中执行此操作:

    <appSettings configSource="....\file.config" />

    以下是该功能的文档:http://msdn.microsoft.com/en-us/library/ms228154(v=vs.85).aspx

  2. 我相信您可以使用System.Configuration.ConfigXmlDocument类手动加载配置文件。使用no-arg构造函数构造一个,然后调用其Load(String filename)方法。

  3. 通过实施自定义SettingsProvider将您的配置存储在注册表而不是文件系统中。