2012-11-12 159 views
4

我有一个应用程序,我使用Windows 7上的Visual Studio 2010中的安装程序进行部署。程序部署并运行可以在Windows 7和XP上运行,但是当我在Windows 8系统上部署它时,会遇到有关访问配置文件的错误。加载配置文件时发生错误:访问路径c: Program Files(x86) ... denied

该程序安装在c:\ Program Files文件(x86)[公司名称] [应用程序名称] \中,并且被引用的文件是一个临时文件,其名称与Windows GetTempFile生成的机器相似, x4q0toqw.tmp。它不存在于此文件夹中,然后有一个对exe配置文件(myapp.exe.config,它确实存在)的引用

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

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

感谢,

加里

这是两个不同的机器,但我登录到同一域中两个相同的用户,并且是一名管理员。

+0

同一台机器?两个会话的管理权限? – Brad

+0

您何时在安装过程中或应用程序运行时出现错误?安装程序是您自己编写的,还是商业产品? –

+0

当应用程序加载时,我在form_load调用中得到第一个错误,这是我加载应用程序的所有配置设置的地方。由于没有运作,没有任何工作。设置非常简单,我编写它,它只是将应用程序放在程序文件文件夹,桌面上的快捷方式等。 – Gary

回答

3

也许你的应用程序在加载过程中重写你的应用程序配置,这将导致系统质疑访问授权......如果是这样,可能是你可以改变你的应用程序(安装的)的属性让管理员权利......这将使您的应用程序自动有权编程编辑应用程序配置。

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

+2

请勿在您的帖子中使用签名或标语。阅读http://stackoverflow.com/faq#signatures – Anand

0

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

+1

您不应该授予Program Files文件夹内的修改权限。将文件放在适当的位置,例如ProgramData或(更好的是)用户的应用程序数据文件夹。 –

+0

在我将当前应用程序域的配置文件位置设置为保存在AppDataFolder中的app.config位置后,它可以正常工作。 AppDomain.CurrentDomain.SetData(“APP_CONFIG_FILE”,Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+“\\ app.config”); –

0

我在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值定义一个高特权帐户,但大多数 服务并不需要这样一个提升的权限级别。

+0

是的,所以这是一个非常糟糕的解决方案。问题在于你不应该首先写入Program Files目录中的文件。安装您的服务以具有管理权限的用户身份绕过安全性是一个坏建议。 – CodeCaster

+0

嗯,该服务只写入其自己的配置文件。 – snark

+0

是的,这就是你打算做的事情。这是一种服务,可能带有某种IPC机制,通过一个错误可能用于访问机器上任意位置的文件,并通过管理权限访问常规用户不应该访问的许多其他内容。当您只需将配置文件存储在运行服务的用户的AppData文件夹中时,就不需要引入这样的攻击界面。 – CodeCaster

相关问题