2010-09-05 162 views
0

当我们为我们的.NET应用程序用于SetUp &部署项目,才能被安装我们的应用程序被设置为C:\Program Files..... 我们的应用程序完美运行,如果我们使用的是默认的文件夹Windows XP机器。但是,如果我们使用的是Windows Vista或Windows 7计算机,应用程序不会完美运行,特别是如果我们在我们的应用程序中执行任何文件操作...Windows 7兼容性问题

任何人都可以找到这个问题的解决方案?是否有任何方法可以穿透Windows 7的用户帐户控制和文件访问控制?或者任意1可以选择将默认安装文件夹从[ProgramFilesFolder]\[Manufacturer]\[ProductName]更改为其他文件夹?

+0

您没有在您的问题中提供足够的信息。主要 - 你的意思是“不能完美运行”?什么是问题?例外?错误? – Oded 2010-09-05 06:40:46

+0

应用程序将运行..我的应用程序包括许多文件操作,例如,许可,而我添加许可证文件2我的应用程序,它发生2是一个问题。如果在[ProgramFilesFolder] [Manufacturer] [ProductName]中安装我的应用程序,简而言之,文件操作无法执行。但是,如果将它安装在另一个目录中,例如“C:\ Myapp \ New \”,那么它不成问题。 – 2010-09-05 06:49:20

+0

您能否编辑您的问题并直接添加相关详细信息而不是将它们添加为注释? – Oded 2010-09-05 06:51:27

回答

3

如果你的应用程序写入其安装文件夹下的所有文件(即Program Files如果使用默认路径下),那么它写的不好。您不应该尝试绕过操作系统安全机制来保护用户免遭严重写入的应用程序的侵害;你应该修复你的应用程序,使其正常工作。

这当然不是.NET的问题。任何执行同样任务的应用程序,无论使用哪种语言/框架,都会遇到同样的问题。

+0

当我们开发这样的应用程序时,你能否给出一个解决方案来修复这个错误? – 2010-09-05 06:50:57

+0

我的意思是,我希望2do文件操作与我的应用程序,但它不是必需的,我的应用程序应该安装在“C:\ Program Files文件” – 2010-09-05 06:52:09

+0

您可以“做文件操作”,只是受到限制。具体来说,你可以在应用程序文件夹中读取任何东西。不过,你不能在那里写。您可以在其他地方(例如,当前正在运行您的应用程序的用户的“我的文档”)进行书写。 – 2010-09-05 08:15:11

1

您仍然应该在Program Files文件夹中安装您的应用程序。有充足的理由在那里 - 所有用户的单一副本,在众所周知的锁定的地方,除了管理员以外,没有人可以篡改你的二进制文件。

但是,你正在做的任何文件操作应该是在用户可写文件的标准Windows的地点之一。有几个这样的文件夹,这取决于文件使用模式。您可以在下面的做题阅读更多有关这些:所有用户共享

My winform app uses xml files to store data, where should I store them so Vista users can write to them?
Vista and ProgramData

1

数据在C共:\ ProgramData(使用Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)找出它实际上生活 - 它可以在Windows版本中不同)。

特定于用户

数据应该在SpecialFolder.ApplicationData。如果用户具有漫游配置文件,则在机器之间共享。

特定于用户

数据也是特定的机器应该是SpecialFolder.LocalApplicationData

如果你真的需要把东西在你的程序的安装目录,则需要使用管理员权限才能做到这一点。

您应该通过在程序第一次运行时提示提升来做到这一点。最好,你应该在安装过程中这样做(因为你已经提升了)。

1

首先,你不应该设置你的应用程序下C到安装:\ Program Files文件\ ...,则应该将其设置为%PROGRAMFILES%\ ...虽然这些通常等同于同样的事情,它们可以在64位系统上有所不同,或者如果系统已经这样设置,它们可能会非常不同。

正如已经提到过的,不要试图绕过UAC,这是出于某种原因出现的,您的程序并不比系统上的任何其他程序更特别。相反,你应该做的就是设置你的应用程序清单,以便在启动时获得管理级别权限(如果绕过文件系统虚拟化,尽管用户可以拒绝它,甚至可能甚至没有以管理员身份启动某些内容的权限)。您可以做的另一件事是在您的应用程序所在的文件夹中设置ACL,并让机器上的所有用户都可以读取/写入该文件夹(这必须在安装时完成)。

或者,您可以按照正确的方式执行操作,并将数据文件存储在您有权访问的%APPDATA%文件夹中,尽管这些文件夹特定于系统的每个用户。