为什么我的C#app无法在Windows 7中创建文件?

时间:2010-04-23 15:56:11

标签: c# windows-7

我有一个C#应用程序为自己创建一个设置文件来存储某些可视元素的当前状态。此应用程序适用于任何未运行Windows 7的计算机,但在这些计算机上,我们收到错误,因为用户没有权限,无法创建设置文件。现在,我可以通过访问每台计算机,以管理员身份登录并为用户提供对我们已安装的应用程序的程序文件夹的读写访问权来解决此问题,但必须有更好的方法。

似乎在XP中,您对默认创建的文件夹具有写入权限,但情况不再如此。在安装程序包中是否需要设置才能使其正常工作?

8 个答案:

答案 0 :(得分:19)

重点是您不应该将设置文件存储在程序文件夹中。微软长期以来一直反对这一建议,但开始对Vista IIRC采取更严格的措施。

使用Environment.SpecialFolders.ApplicationData(等)找到最适合放置设置的位置。或者使用.NET设置基础结构为您自动执行此操作。

答案 1 :(得分:7)

您是否尝试在安装文件夹中创建文件?您应该使用用户数据文件夹来存储数据而不是安装文件夹。使用Environment.SpecialFolders.ApplicationData文件夹获取可以写入的文件夹。

答案 2 :(得分:4)

您可能在非Windows 7计算机上以管理员身份运行,可以随处写入。请确保将每个用户实例数据保存在其AppData文件夹中(如果它应该从计算机跟随它们进行漫游,或者如果它只是缓存或本地到taht机器,则为本地)。如果需要在用户之间共享设置,请使用具有相应权限的C:\ ProgramData文件夹。

程序不应尝试将设置存储在其安装目录中。

务必使用SpecialFoldersEnvironment.GetFolderPath来获取所需的正确位置。您永远不应该硬编码路径,因为它们在版本和语言之间可能不同。 (我知道在德语版的XP中它不是Program Files而是Programme!)

答案 3 :(得分:3)

  

此应用在任何未运行Windows 7的计算机上运行正常

错误!如果您以管理员身份运行,它仅适用于那些计算机。我想如果你尝试在任何商用计算机而不是家用计算机上运行它,你会发现你的程序在Windows XP上也被破坏了。

相反,这种信息需要放在一个特殊的应用程序数据文件夹中。

答案 4 :(得分:2)

这是程序中的安全漏洞,因为您的程序正在将信息写入程序目录(这应该受到保护。)如果是纠正根本原因的情况,请考虑使用SpecialFolder enumerationApplication上的静态成员(如CommonAppDataPath)将您的信息写入更合适的位置。

假设通过路径编写文件的典型方法,这是一个微不足道的修复,没有很好的“权宜之计”理由不能纠正根本原因。如果您不确定如何操纵路径,请考虑使用Path.Combine()。它适合你。

答案 5 :(得分:2)

通常,您不应将程序数据写入Program Files下的任何文件夹(即使您创建了该文件夹)。您应该使用Environment.GetFolderPath(...)来确定应用程序特定数据的放置位置。您可以传递定义here的众多枚举中的一个 - 您可能需要Environtment.SpecialFolder.CommonApplicationData

答案 6 :(得分:2)

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

答案 7 :(得分:-1)

我不知道这是怎么回事。我需要能够编写一个报告并将它保存在用户文档文件夹中我用来读取我正在编写报告的xml文件的文件夹。