【问题标题】:Modifying App.config in Program Files directory修改 Program Files 目录下的 App.config
【发布时间】:2014-02-15 03:11:48
【问题描述】:

有点两部分的问题。

我开发了一个可以读取和写入 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 重新定位到不受保护的目录?

【问题讨论】:

  • 查看这个解释 --> superuser.com/questions/321502/…
  • 我确定这是因为您是您机器上的管理员,但用户不是他们机器上的管理员stackoverflow.com/questions/7654780/…
  • ConfigurationManager.AppSettings.Set("Endpoint", endpointTxtBox.Text) 会为您做同样的事情吗?和一个想法。当用户运行您的应用程序时,请尝试右键单击并执行“以管理员身份运行” - 它可能会起作用
  • @T.S.我已经用非管理员用户尝试过,他们也没有收到错误。
  • 如果 Run As Administrator 没有帮助,请转到您的应用文件夹并手动向该文件夹添加权限,然后看看它是如何工作的

标签: c# .net app-config


【解决方案1】:

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

查看此链接了解详情:

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

请注意,使用强类型的 .NET Settings 类而不是原始的、更弱类型的 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 目录下,因此它们具有完整的读/写权限。

【讨论】:

    【解决方案2】:

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

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

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

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

    2. 我相信您可以使用 System.Configuration.ConfigXmlDocument 类在任何您想要的地方手动加载配置文件。使用无参数构造函数构造一个,然后调用其Load(String filename) 方法。

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

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2017-02-01
      相关资源
      最近更新 更多