【问题标题】:Error occurred loading a configuration file: Access to path c:\Program Files (x86)\... denied加载配置文件时出错:访问路径 c:\Program Files (x86)\... 被拒绝
【发布时间】:2012-10-31 22:45:05
【问题描述】:

我有一个应用程序,我使用 Windows 7 上的 Visual Studio 2010 中的安装程序部署该应用程序。该程序在 Windows 7 和 XP 上部署并运行良好,但是当我在 Windows 8 系统上部署它时,我收到有关访问的错误一个配置文件。

程序安装在 c:\Program Files (x86)[Company Name][App Name]\ 中,被引用的文件是一个临时文件,其名称看起来像是由 Windows GetTempFile 生成的机器,例如x4q0toqw.tmp。该文件夹中不存在,然后有对exe配置文件的引用(myapp.exe.config,确实存在)

如果我在安装和运行良好的 Windows 8 系统上构建和运行代码,我不会收到错误消息,但是如果我在 Windows 7 上部署 Window 8 编译的应用程序,我会收到关于访问权限的相同错误配置文件。两台机器都是 64 位的,但生成的是 32 位的应用程序。

我不打算发布两个二进制文件。谁能告诉我发生了什么?我正在尝试设置 JIT 调试,以便在它引发异常时附加到 exe,因为本机调试它对我没有帮助,因为我没有得到异常。

这是在两台不同的机器上,但我在两台机器上都以同一个用户登录到同一个域,并且是管理员。

【问题讨论】:

  • 同一台机器?两个会话的管理员权限?
  • 什么时候出现错误,是在安装过程中还是在应用程序运行时?安装程序是您自己编写的,还是商业产品?
  • 我在应用程序加载时收到第一个错误,在 form_load 调用中,我在这里加载了应用程序的所有配置设置。如果它不起作用,则没有任何作用。设置非常简单,我自己写的,它只包括将应用程序放在程序文件文件夹中,桌面上的快捷方式等。
  • @Gary:你找到任何解决方案了吗,请分享你解决这个问题的方法。

标签: c# windows file config


【解决方案1】:

也许您的应用程序在加载期间正在重写您的应用程序配置,这将导致系统质疑访问权限...如果是这样,您可以更改应用程序(已安装)的属性以拥有管理员权限...这将使您的应用程序自动有权以编程方式编辑应用程序配置。

或者...您可以忘记应用程序配置重写并将所有内容放在默认的应用程序配置脚本中。但这会暴露您的应用程序数据库安全性...

【讨论】:

【解决方案2】:

通过提升运行我的服务的帐户权限,我在 Win 7 上的 Visual Studio 2010 中解决了一个非常类似的问题。见步骤 9 here:

Account 属性设置为LocalSystem.

当我的serviceProcessInstaller1LocalService 帐户下运行时,我收到了与您类似的错误。但是将帐户更改为LocalSystem 解决了这个问题。然后我安装的服务能够写入其C:\Program Files (x86)\[Company Name]\[App Name]\[App Name].exe.Config 文件。即使在我运行服务的安装程序时选中了 Just me 的安装复选框。

请记住 here 的评论:

LocalSystem 值定义了一个高特权帐户,但大多数 服务不需要如此提升的权限级别。

【讨论】:

  • 是的,所以这是一个非常糟糕的解决方案。问题是您不应该首先写入 Program Files 目录中的文件。安装您的服务以作为具有管理权限的用户运行以绕过该安全性是不好的建议。
  • 嗯,服务只是写入自己的配置文件。
  • 是的,这就是你想要的。不过,它是一项服务,可能带有某种 IPC 机制,通过一个错误,它可能被用来访问机器上任意位置的文件,并通过管理权限访问许多其他普通用户不应该访问的东西。当您只需将配置文件存储在运行您的服务的用户的 AppData 文件夹中时,就不需要引入这样的攻击接口。
  • 好的,谢谢 - 我会记住 AppData 文件夹选项。然而我的解决方案对我有用,尽管它可能不是最好的解决方案,官方walkthrough 示例也使用了LocalSystem 帐户本身!我至少添加了一个警告,所以我让读者来决定哪种方法最适合他们......
【解决方案3】:

我有同样的错误。这是因为临时文件是在C:\Program Files (x86)\[Company Name]\[App Name] 文件夹中创建的,而普通用户(PC 名称\用户)没有修改此文件夹的权限。一旦我添加了修改权限,它就开始正常工作了。

【讨论】:

  • 您不应授予 Program Files 文件夹内的修改权限。将文件放在适当的位置,例如 ProgramData 或(更好)用户的应用程序数据文件夹。
  • 在我将当前应用程序域的配置文件位置设置为保存在“AppDataFolder”中的 app.config 的位置后,它可以正常使用以下代码。 AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\app.config");
猜你喜欢
  • 2016-11-12
  • 1970-01-01
  • 2019-05-20
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
相关资源
最近更新 更多