0

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

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

4

3 回答 3

1

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

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

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

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

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

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

于 2012-12-13T05:24:50.490 回答
0

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

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

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

于 2012-12-13T07:18:40.790 回答
0

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

    bool HasAccessToWrite(string path)
    {
        try
        {
            using (FileStream fs = File.Create(Path.Combine(path, "Access.txt"), 1, FileOptions.DeleteOnClose))
            {
            }
            return true;
        }
        catch
        {
            return false;
        }
    }
于 2012-12-13T06:54:47.863 回答