WPF 应用将文件/数据写入"C:ProgramData"但无法写入其他文件夹



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

注意:它仅适用于程序数据文件夹。

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

  1. C:\用户\用户名\
  2. C:\程序数据\
  3. D:\

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

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

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

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

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

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

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

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

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

最新更新