【问题标题】:Why can't my C# app create files in Windows 7?为什么我的 C# 应用程序不能在 Windows 7 中创建文件?
【发布时间】:2010-04-23 15:56:11
【问题描述】:

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

似乎在 XP 中,默认情况下您对创建的文件夹具有写入权限,但现在情况已不再如此。安装包中是否有我需要的设置才能完成这项工作?

【问题讨论】:

  • 您是否检查过您的安装包是否将设置目录标记为可写并将其分配给正确的用户?
  • 你没有说你在哪里创建文件,这可能是有用的信息

标签: c# windows-7


【解决方案1】:

关键是您不应该将设置文件存储在程序文件夹中。微软长期以来一直反对这样做,但开始对 Vista IIRC 进行更严格的处理。

使用Environment.SpecialFolders.ApplicationData(等)找到最适合放置设置的位置。或者使用 .NET 设置基础架构,它会自动为您完成这项工作。

【讨论】:

  • 谢谢,我知道我做错了什么。多年来,我一直将数据存储在程序文件夹中,这只是一种习惯。我切换到在 Application Data 中创建自己的文件夹,一切正常。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      此应用在任何未运行 Windows 7 的机器上都能正常运行

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          一般来说,您不应该将程序数据写入 Program Files 下的任何文件夹(即使您创建了该文件夹)。您应该使用Environment.GetFolderPath(...) 来确定将应用程序特定数据放在哪里。您可以传入定义为here 的众多枚举之一——您可能想要Environtment.SpecialFolder.CommonApplicationData

          【讨论】:

            【解决方案7】:
            Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            

            【讨论】:

              【解决方案8】:

              我看不出这是一个实际的答案。我需要能够编写报告并将用户文档文件夹保存在我用来读取要从中编写报告的 xml 文件的同一文件夹中。

              【讨论】:

              • 所以你写了一个答案就是为了这么说?请使用 cmets 或提出新问题(是的,您仍然无法访问 cmets,您需要先提供一些真实的答案或提出好的问题才能获得代表)
              猜你喜欢
              • 1970-01-01
              • 2011-05-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多