【问题标题】:WPF app writes files/data into "C:\ProgramData" but fails to write into other foldersWPF 应用程序将文件/数据写入“C:\ProgramData”但无法写入其他文件夹
【发布时间】:2012-12-13 05:19:10
【问题描述】:

我们开发了允许用户选择文件夹路径的 WPF 应用程序。 WPF 应用程序将文件/数据写入此选定路径。当我们选择“C:\ProgramData”作为路径时,它会创建文件并写入数据。但是当路径不是“C:\ProgramData”时,会生成文件但数据不会写入文件,这似乎是权限问题。任何人都可以帮助我们找出,我们如何为选定的文件夹分配与“C:\ ProgramData”相同的权限,以便它允许将数据写入文件。总而言之,“ProgramData”有哪些额外的权限,而不是其他文件夹?

注意:它只适用于 ProgramData 文件夹。

【问题讨论】:

  • 这个“其他路径”是什么?
  • 获得路径后最好的方法是检查是否可以向其写入数据,如果可以的话,否则会给用户一条消息“没有写入权限,请选择其他目录”

标签: c# wpf programdata folder-permissions


【解决方案1】:

每当您的应用程序以标准用户权限启动时,它只能写入标准用户可以写入的文件夹。例如。是:

  1. C:\Users\USERNAME\
  2. C:\ProgramData\
  3. D:\

它将无法写入以下文件夹:

  1. C:\
  2. C:\Users\SOME_OTHER_USERNAME\
  3. c:\Windows
  4. C:\Windows\System32 等

为此,您需要禁用 UAC 或使用管理权限启动应用程序。

我建议每当用户从您的应用程序中选择一个文件夹时,请检查您是否可以在接受路径之前在该位置创建一个文件/文件夹。

【讨论】:

【解决方案2】:

我可以给出的解决方案是让用户在获取文件夹路径后选择路径,只需检查您是否可以向其中写入数据,请参阅此代码

    bool HasAccessToWrite(string path)
    {
        try
        {
            using (FileStream fs = File.Create(Path.Combine(path, "Access.txt"), 1, FileOptions.DeleteOnClose))
            {
            }
            return true;
        }
        catch
        {
            return false;
        }
    }

【讨论】:

    【解决方案3】:

    @Ganesh 是对的,但您可以选择以下选项之一:

    1. 以管理员权限运行安装程序,要求用户在安装过程中选择目标文件夹并将权限设置为每个人或所需的用户/角色组。
    2. 如果上述不适用,请将您的应用程序配置为始终在管理员帐户下运行,这样它就可以访问所有文件夹以写入数据。按照here 的说明配置以管理员身份运行的应用程序清单:
    3. 关闭 UAC,但不是推荐的方法。

    我有同样的问题,所以我强制安装程序在管理员权限下运行,并要求用户在安装过程中创建目标文件夹。使用自定义操作为目标文件夹上的每个用户组设置完全权限。由于安全对我们来说不是问题,因此可以允许所有人,但在使用此选项之前请考虑您的环境。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-06
      • 2013-08-06
      • 2011-01-22
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多