WPF应用程序将文件/数据写入“C:\ ProgramData”但无法写入其他文件夹

时间:2012-12-13 05:19:11

标签: c# wpf programdata folder-permissions

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

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

3 个答案:

答案 0 :(得分:1)

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

  1. C:\ Users \用户名\
  2. C:\ ProgramData \
  3. d:\
  4. 无法写入如下文件夹:

    1. C:\
    2. C:\用户\ SOME_OTHER_USERNAME \
    3. C:\ WINDOWS
    4. C:\ Windows \ System32等
    5. 为此您需要禁用UAC或使用管理权限启动应用程序。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

  1. 使用管理员权限运行安装程序,要求用户在安装期间选择目标文件夹,并将权限设置为每个人或所需的用户/角色组。
  2. 如果上述条件不适用,请将应用程序配置为始终在管理员帐户下运行,这样就可以访问所有要写入数据的文件夹。要按照here所解释的那样配置作为管理员用户应用程序清单运行:
  3. 关闭UAC,但不是推荐的方法。
  4. 我遇到了同样的问题,我强迫安装程序在管理员权限下运行,并要求用户在安装过程中创建目标文件夹。使用自定义操作为目标文件夹上的每个用户组设置完整权限。由于安全性对我们来说不是问题,因此在使用此选项之前允许每个人考虑您的环境是可以的。