UWP应用访问C盘遇0x80070005权限拒绝问题求助
UWP访问C盘文件夹权限问题及解决方案
问题描述
在UWP应用中尝试直接在C盘创建文件夹并进行文件读写操作时,触发Access is denied错误(错误码:HRESULT: 0x80070005 (E_ACCESSDENIED))。已完成以下配置但问题仍存在:
- 项目中声明了
broadFileSystemAccess权限 - 在应用的文件系统设置及右键应用的「应用设置」中开启了文件访问权限
需求:解决当前权限问题,或提供无需用户手动选择即可直接创建文件夹的替代方案。
现有代码
private async void myBtn_Click(object sender, RoutedEventArgs e) { // 指定文件夹路径 string folderPath = @"C:\RGNEW"; // 从路径获取StorageFolder StorageFolder folder = StorageFolder.GetFolderFromPathAsync(folderPath).AsTask().Result; // 将文件夹添加到FutureAccessList,用路径作为令牌 string token = folderPath; // 可自定义令牌 StorageApplicationPermissions.FutureAccessList.AddOrReplace(token, folder); }
解决方案
1. 修正异步调用逻辑
代码中使用.AsTask().Result会阻塞UI线程,且可能引发死锁,同时未处理文件夹不存在的情况,改用await并添加异常处理:
private async void myBtn_Click(object sender, RoutedEventArgs e) { string folderPath = @"C:\RGNEW"; try { // 尝试获取已存在的文件夹 StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(folderPath); StorageApplicationPermissions.FutureAccessList.AddOrReplace(folderPath, folder); } catch (FileNotFoundException) { // 文件夹不存在则创建 StorageFolder folder = await StorageFolder.CreateFolderAsync(folderPath, CreationCollisionOption.OpenIfExists); StorageApplicationPermissions.FutureAccessList.AddOrReplace(folderPath, folder); } catch (UnauthorizedAccessException ex) { // 捕获权限异常,可添加日志或提示逻辑 Debug.WriteLine($"权限错误:{ex.Message}"); } }
2. 确认权限配置完整性
- Manifest声明检查:确保
Package.appxmanifest中正确添加broadFileSystemAccess权限,且命名空间正确:
注意:<Package ... xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"> <Capabilities> <Capability Name="internetClient" /> <rescap:Capability Name="broadFileSystemAccess" /> </Capabilities> </Package>broadFileSystemAccess属于受限能力,需使用rescap命名空间,且仅支持Windows 10 1809及以上版本。 - 系统权限验证:进入「设置→应用→你的应用→高级选项→文件系统」,确认「允许此应用访问你的文件系统」开关处于开启状态,且应用已重启生效。
3. 替代方案:避免直接访问系统根目录
如果业务允许,优先使用UWP推荐的存储方式,无需依赖broadFileSystemAccess:
- 应用专属本地存储:仅应用可访问,无需额外权限:
// 获取应用本地存储文件夹 StorageFolder localFolder = ApplicationData.Current.LocalFolder; // 创建目标文件夹 StorageFolder newFolder = await localFolder.CreateFolderAsync("RGNEW", CreationCollisionOption.OpenIfExists); - 已知文件夹(如文档、下载):需在Manifest中声明对应权限,用户无需手动选择即可访问:
- 在Manifest中添加权限:
<Capabilities> <uap:Capability Name="documentsLibrary" /> </Capabilities> - 代码创建文件夹:
StorageFolder documentsFolder = KnownFolders.DocumentsLibrary; StorageFolder newFolder = await documentsFolder.CreateFolderAsync("RGNEW", CreationCollisionOption.OpenIfExists);
- 在Manifest中添加权限:
4. 额外排查点
- 确认Windows Defender或第三方安全软件未拦截应用的文件系统操作;
- 尝试以管理员身份运行应用(部分系统目录可能需要额外权限);
- 测试非系统根目录路径(如
C:\Users\你的用户名\Test),验证权限是否正常。
内容的提问来源于stack exchange,提问作者Sharath H G
相关产品推荐
相关产品推荐

