在尝试使用“受控文件夹访问”在“我的文档”中创建文件夹时,CreateFolder会引发FileNotFoundException。 我需要检查我的应用程序是否可以在“我的文档”中创建文件夹。当“受控文件夹访问”开启时,如何检查我是否对此拥有权限。
我尝试使用DirectoryInfo.GetAccessControl方法,它表明它允许。现在,这是我尝试创建文件夹并处理FileNotFoundException的唯一方法。
try
{
Directory.CreateDirectory(Path.Combine(MyDocuments, "Foo"));
}
catch (FileNotFoundException)
{
//Do something
}
答案 0 :(得分:0)
FileNotFoundException
在这里肯定是意外的,因为Directory.CreateDirectory
不在documented exceptions的列表中。此异常似乎是Windows Defender阻止您的应用访问该文件夹而不是访问较低级别的Windows文件系统的结果,因此System.IO
会为您提供成功的结果。
请检查此thread,因为这似乎是您的情况。并且非常last comment建议通过受控访问列表允许该应用。我怀疑在适当的异常类型实施到较低级别之前,您几乎陷于此处捕获未记录的异常。可能会有一些未公开的WinAPI询问Windows Defender,您的应用程序是否可以访问该文件夹,但是从长远来看,依靠它可能更容易出错。希望对您有帮助!
答案 1 :(得分:0)
处理此问题的最佳方法是检查几件事。
这是通过检查本地计算机注册表项完成的:
HKLM \ SOFTWARE \ Policies \ Microsoft \ Windows Defender \ Windows Defender漏洞利用 Guard \受控文件夹访问
EnableControlledFolderAccess
的值(启用1表示禁用,0表示禁用)-请注意,这也可以不算什么! SubKeyNames
中循环,然后在GetValueNames()
中搜索键AllowedApplications
-(返回字符串数组) 如果启用了受控文件夹访问并且您的应用程序名称(Assembly.GetExecutingAssembly().ManifestModule.Name
)不在AllowedApplications列表中,则您将获得FileNotFoundException
并且将无法创建该文件夹(用户还将收到病毒警告!)。
编辑:
该配置单元下还有另一个子项ProtectedFolders
,其中列出了Microsoft决定需要保护的默认文件夹(包括“我的文档”,“我的图片”等文件夹)以及该用户的其他所有文件夹(管理员)可以添加。如果系统上启用了“受控文件夹访问”,您也可以检查此(字符串数组)。