打开“受控文件夹访问”时如何检查.NET中的目录写权限

时间:2019-06-21 12:37:31

标签: c#

在尝试使用“受控文件夹访问”在“我的文档”中创建文件夹时,CreateFolder会引发FileNotFoundException。 我需要检查我的应用程序是否可以在“我的文档”中创建文件夹。当“受控文件夹访问”开启时,如何检查我是否对此拥有权限。

我尝试使用DirectoryInfo.GetAccessControl方法,它表明它允许。现在,这是我尝试创建文件夹并处理FileNotFoundException的唯一方法。

try
{
    Directory.CreateDirectory(Path.Combine(MyDocuments, "Foo"));
}
catch (FileNotFoundException)
{
    //Do something
}

2 个答案:

答案 0 :(得分:0)

FileNotFoundException在这里肯定是意外的,因为Directory.CreateDirectory不在documented exceptions的列表中。此异常似乎是Windows Defender阻止您的应用访问该文件夹而不是访问较低级别的Windows文件系统的结果,因此System.IO会为您提供成功的结果。

请检查此thread,因为这似乎是您的情况。并且非常last comment建议通过受控访问列表允许该应用。我怀疑在适当的异常类型实施到较低级别之前,您几乎陷于此处捕获未记录的异常。可能会有一些未公开的WinAPI询问Windows Defender,您的应用程序是否可以访问该文件夹,但是从长远来看,依靠它可能更容易出错。希望对您有帮助!

答案 1 :(得分:0)

处理此问题的最佳方法是检查几件事。

  1. 检查计算机上是否启用了受控文件夹访问
  2. 如果已启用,请检查您的应用程序是否已从控件中免除。

这是通过检查本地计算机注册表项完成的:

HKLM \ SOFTWARE \ Policies \ Microsoft \ Windows Defender \ Windows Defender漏洞利用 Guard \受控文件夹访问

  1. 读取EnableControlledFolderAccess的值(启用1表示禁用,0表示禁用)-请注意,这也可以不算什么!
  2. SubKeyNames中循环,然后在GetValueNames()中搜索键AllowedApplications-(返回字符串数组)

如果启用了受控文件夹访问并且您的应用程序名称(Assembly.GetExecutingAssembly().ManifestModule.Name)不在AllowedApplications列表中,则您将获得FileNotFoundException并且将无法创建该文件夹(用户还将收到病毒警告!)。

编辑:

该配置单元下还有另一个子项ProtectedFolders,其中列出了Microsoft决定需要保护的默认文件夹(包括“我的文档”,“我的图片”等文件夹)以及该用户的其他所有文件夹(管理员)可以添加。如果系统上启用了“受控文件夹访问”,您也可以检查此(字符串数组)。