C# 加载配置文件时出错:访问路径c:\Program Files(x86)\。。。否认

C# 加载配置文件时出错:访问路径c:\Program Files(x86)\。。。否认,c#,windows,file,config,C#,Windows,File,Config,我在Windows7上的VisualStudio2010中使用安装程序部署了一个应用程序。该程序在Windows7和XP上部署并运行良好,但当我在Windows8系统上部署它时,我会在访问配置文件时出错 该程序安装在c:\program Files(x86)[公司名称][应用程序名称]]中,并且引用的文件是一个临时文件,其名称看起来像是由Windows GetTempFile生成的计算机,例如x4q0toqw.tmp。此文件夹中不存在,然后存在对exe配置文件(myapp.exe.config,

我在Windows7上的VisualStudio2010中使用安装程序部署了一个应用程序。该程序在Windows7和XP上部署并运行良好,但当我在Windows8系统上部署它时,我会在访问配置文件时出错

该程序安装在c:\program Files(x86)[公司名称][应用程序名称]]中,并且引用的文件是一个临时文件,其名称看起来像是由Windows GetTempFile生成的计算机,例如x4q0toqw.tmp。此文件夹中不存在,然后存在对exe配置文件(myapp.exe.config,确实存在)的引用

如果我在Windows 8系统上构建并运行代码,它安装并运行正常,我不会收到错误,但是如果我在Windows 7上部署Windows 8编译应用程序,我会收到与访问配置文件相同的错误。这两台机器都是64位的,但都生成一个32位的应用程序

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


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

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


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

我也有同样的错误。这是因为临时文件是在
C:\Program Files(x86)\[公司名称]\[应用程序名称]
文件夹中创建的,普通用户(PC名称\用户)无权修改此文件夹。我一添加修改权限,它就开始正常工作。

我在Win 7上的Visual Studio 2010中解决了一个非常类似的问题,提高了我的服务所使用的帐户权限。见第9步:

将帐户属性设置为本地系统。

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

请记住以下几点:

LocalSystem
值定义了一个高度特权的帐户,但大多数 服务不需要这样一个提升的特权级别


同一台机器?两个会话中的管理员权限?在安装过程中或应用程序运行时,您何时收到错误?安装程序是您自己编写的还是商业产品?当应用程序加载时,我会在表单_load call中收到第一个错误,我在表单_load call中加载应用程序的所有配置设置。如果这种方法不起作用,什么都不起作用。安装非常简单,我写了它,它只包括将应用程序放在program files文件夹中,桌面上的快捷方式等@Gary:你找到解决方法了吗,请分享你解决这个问题的方法。请不要在帖子中使用签名或标语。阅读:您不应授予程序文件文件夹内的修改权限。将文件放在适当的位置,例如ProgramData或(更好的是)用户的应用程序数据文件夹中。在我将当前应用程序域的配置文件位置设置为“AppDataFolder”中保存的app.config的位置后,以下代码可以正常工作。AppDomain.CurrentDomain.SetData(“APP_CONFIG_FILE”,Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+“\\APP.CONFIG”);是的,这是一个非常糟糕的解决方案。问题是,您首先不应该写入ProgramFiles目录中的文件。将服务安装为以具有管理权限的用户的身份运行以绕过该安全性是一个错误的建议。嗯,该服务只会写入其自己的配置文件。是的,这就是您希望它执行的操作。不过,这是一项服务,可能带有某种IPC机制,通过一个bug,它可能被用来访问机器上任意位置的文件,并通过管理权限访问普通用户不应该访问的许多其他内容。如果您只需将配置文件存储在运行您的服务的用户的AppData文件夹中,则无需引入此类攻击界面。好的,谢谢-我会记住AppData文件夹选项。然而,我的解决方案对我来说是有效的,尽管它可能不是最好的解决方案,官方示例也使用了
LocalSystem
帐户本身!我至少添加了一个警告,所以我把它留给读者来决定什么方法最适合他们。。。