目录
3、在未安装杀毒软件的Win10电脑上可能会自动打开文件夹管控
4、到微软官网上查看Windows 安全中心的病毒和威胁防护与文件夹管控的详细说明
C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C++实战专栏(专栏文章已更新460多篇,持续更新中...)https://blog.csdn.net/chenlycly/article/details/140824370C++ 软件开发从入门到精通(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_12695902.htmlVC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件分析工具从入门到精通案例集锦(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/131405795开源组件及数据库技术(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_2276111.html 最近遇到了一个我们的软件在Win10系统中无法向系统公用文档(C:\Users\Public\Documents)路径进行写操作(在该文件夹下创建文件或文件夹、向该路径下的文件进行写操作)的问题。经排查,是系统自动开启了文件夹管控(文件夹限制访问),管控的文件夹就包含这个系统公共文档路径,导致无法向该路径下写入。本文分享一下这个问题的解决过程。
1、问题说明
某天某客户在一台电脑上安装我们的软件,安装完成启动软件,启动时报出了在系统公共文件夹中创建文件夹失败的错误提示,如下所示:
我们软件会向磁盘上写入一些文件,会读写配置文件等一些文件读写操作,考虑到系统目录的操作权限,以及不同用户登录到系统都要操作公共文件的问题,我们将部分文件放置到系统公共文档目录C:\Users\Public\Documents下。
没想到这个目录也会遇到操作权限问题,导致在该目录下创建文件或者文件夹失败。经排查,是系统在某些场景下会自动开启文件夹管控(文件夹限制访问),管控的文件夹就包含这个C:\Users\Public\Documents公共文档的路径,导致没法在该目录下进行写操作。
目前的解决办法简单直接,直接将系统开启的文件夹管控(文件夹限制访问)给关闭就可以了。
2、查看系统是否开启了文件夹管控
类似的问题,我们以前遇到过,所以我们后来在公共文档目录中创建文件夹失败时添加一个弹框提示,如下:
如果出现在公共文档目录下创建文件或文件夹失败的问题时,我们可以尝试去看看系统是否开启了文件夹管控,可能是系统开启了文件夹管控导致的。下面详细讲一下查看系统是否开启文件夹管控(文件夹限制访问)的入口与方法。
开启文件夹管控(文件夹限制访问)的入口掩藏的比较深!
首先点击桌面左下角的开始按钮:
在打开的开始菜单窗口中,点击左侧工具栏中的设置按钮,如下:
然后在打开的Windows设置窗口中点击更新与安全:
在打开的窗口中点击左侧的Windows安全中心:
在这里,给大家重点推荐一下我的几个热门畅销专栏,欢迎订阅:(博客主页还有其他专栏,可以去查看)
专栏1:(该精品技术专栏的订阅量已达到560多个,专栏中包含大量项目实战分析案例,有很强的实战参考价值,广受好评!专栏文章持续更新中,预计更新到200篇以上!欢迎订阅!)
C++软件调试与异常排查从入门到精通系列文章汇总https://blog.csdn.net/chenlycly/article/details/125529931
本专栏根据多年C++软件异常排查的项目实践,系统地总结了引发C++软件异常的常见原因以及排查C++软件异常的常用思路与方法,详细讲述了C++软件的调试方法与手段,以图文并茂的方式给出具体的项目问题实战分析实例(很有实战参考价值),带领大家逐步掌握C++软件调试与异常排查的相关技术,适合基础进阶和想做技术提升的相关C++开发人员!
考察一个开发人员的水平,一是看其编码及设计能力,二是要看其软件调试能力!所以软件调试能力(排查软件异常的能力)很重要,必须重视起来!能解决一般人解决不了的问题,既能提升个人能力及价值,也能体现对团队及公司的贡献!
专栏中的文章都是通过项目实战总结出来的,包含大量项目问题实战分析案例,有很强的实战参考价值!专栏文章还在持续更新中,预计文章篇数能更新到200篇以上!
专栏2:(本专栏涵盖了C++多方面的内容,是当前重点打造的专栏,订阅量已达200多个,专栏文章已经更新到460多篇,持续更新中...)
C/C++实战进阶(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_11931267.html
以多年的开发实战为基础,总结并讲解一些的C/C++基础与项目实战进阶内容,以图文并茂的方式对相关知识点进行详细地展开与阐述!专栏涉及了C/C++领域多个方面的内容,包括C++基础及编程要点(模版泛型编程、STL容器及算法函数的使用等)、数据结构与算法、C++11及以上新特性(不仅看开源代码会用到,日常编码中也会用到部分新特性,面试时也会涉及到)、常用C++开源库的介绍与使用、代码分享(调用系统API、使用开源库)、常用编程技术(动态库、多线程、多进程、数据库及网络编程等)、软件UI编程(Win32/duilib/QT/MFC)、C++软件调试技术(排查软件异常的手段与方法、分析C++软件异常的基础知识、常用软件分析工具使用、实战问题分析案例等)、设计模式、网络基础知识与网络问题分析进阶内容等。
专栏3:
C++常用软件分析工具从入门到精通案例集锦汇总(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/131405795
常用的C++软件辅助分析工具有SPY++、PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clumsy、Windbg、IDA Pro等,本专栏详细介绍如何使用这些工具去巧妙地分析和解决项目中遇到的多种问题,很有实战参考价值!
专栏4:
VC++常用功能开发汇总(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/124272585
将10多年C++开发实践中常用的功能,以高质量的代码展现出来。这些常用的高质量规范代码,可以直接拿到项目中使用,能有效地解决软件开发过程中遇到的问题。
专栏5:
C++ 软件开发从入门到精通(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_12695902.html
根据多年C++软件开发实践,详细地总结了C/C++软件开发相关技术实现细节,分享了大量的实战案例,很有实战参考价值。
然后点击病毒与威胁防护:
然后在打开的窗口中,找到“病毒与威胁防护”设置节点,点击设置:
在打开的窗口中,将窗口向下滚动,找到文件夹限制访问节点,点击管理文件夹限制访问权限:
在本问题中,系统打开了文件夹管控,所以在上图中看到文件夹限制访问(文件夹管控)开关被打开了。对于本问题,将该文件夹管控的开关关闭掉,即将文件夹管控关闭即可。
接着,点击受保护的文件夹查看哪些文件夹被管控了:
我们看到公共文档目录C:\Users\Public\Documents就在被管控的文件夹列表中。
3、在未安装杀毒软件的Win10电脑上可能会自动打开文件夹管控
如果Win10系统中没有安装杀毒软件,则Windows系统会使用系统自带的defender杀毒组件,在病毒与威胁防护页面中,能看到找到“病毒与威胁防护”设置节点,能看到设置按钮:
如果系统中安装了杀毒软件,则在病毒与威胁防护页面中看不到“病毒与威胁防护”设置节点,如下所示:
如果系统中没有安装杀毒软件,则系统会自动启用系统自带的defender杀毒软件,可能会自动打开文件夹管控。如果系统中安装了杀毒软件,则系统会关闭自带的defender杀毒软件,防止冲突,所以不会开启文件夹管控。
这个文件夹管控应该是和Windows自带的defender杀毒软件有关,如果系统关闭了defender杀毒软件,则不会开启文件夹管控,就不会有向公共文档(C:\Users\Public\Documents)无法写入的问题了。
4、到微软官网上查看Windows 安全中心的病毒和威胁防护与文件夹管控的详细说明
经观察发现,几乎绝大部分电脑系统默认是不会开启文件夹管控的,只有个别电脑才会自动开启。
关于Windows 安全中心的病毒和威胁防护与文件夹管控的详细说明,可以到百度中以“windows病毒和威胁防护 文件夹限制访问”为关键字进行搜索,找到微软的官方说明页面:
点击之,打开对应的页面:
点击页面中的“了解有关使用受控文件夹访问权限的详细信息”,打开受控文件夹的详细说明页面:
页面链接为:使用受控文件夹访问权限保护重要文件夹免受勒索软件的侵害 - Microsoft Defender for Endpoint | Microsoft Learn
5、解决办法探讨
能否像一些杀毒软件一样,将我们的软件添加到信任列表中呢?微软的官方说明中也提到了,是可以的:
具体怎么操作,可以自行去网上搜索一下。
在本案例中我们是直接将文件管控关闭掉的。最好的办法是,调整文件存放的路径,不要再放到系统公共文档C:\Users\Public\Documents目录中了,将文件放到当前账户的appdata路径中就好了。appdata的路径为:C:\Users\username\AppData\Roaming,获取当前账户的appdata路径的代码如下所示:
TCHAR achTargetPath[MAX_PATH*2] = { 0 };
LPITEMIDLIST ppidl;
if ( SHGetSpecialFolderLocation( NULL, CSIDL_APPDATA, &ppidl ) == S_OK )
{
BOOL bRet = SHGetPathFromIDList( ppidl, achTargetPath );
if ( bRet )
{
}
CoTaskMemFree( ppidl );
return;
}
在调用API函数SHGetSpecialFolderLocation时,将CSIDL_COMMON_DOCUMENTS(该参数获取的是公共文档的路径)换成CSIDL_APPDATA就可以了。
6、最后
当软件遇到无法向公共文档(C:\Users\Public\Documents)等系统公共路径写入的问题时,可以尝试按照上面讲到的操作步骤,查看系统是否开启了文件夹管控。如果开启了文件夹管控,直接将管控关闭掉就可以了。