You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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中声明对应权限,用户无需手动选择即可访问:
    1. 在Manifest中添加权限:
      <Capabilities>
          <uap:Capability Name="documentsLibrary" />
      </Capabilities>
      
    2. 代码创建文件夹:
      StorageFolder documentsFolder = KnownFolders.DocumentsLibrary;
      StorageFolder newFolder = await documentsFolder.CreateFolderAsync("RGNEW", CreationCollisionOption.OpenIfExists);
      

4. 额外排查点

  • 确认Windows Defender或第三方安全软件未拦截应用的文件系统操作;
  • 尝试以管理员身份运行应用(部分系统目录可能需要额外权限);
  • 测试非系统根目录路径(如C:\Users\你的用户名\Test),验证权限是否正常。

内容的提问来源于stack exchange,提问作者Sharath H G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 19:13:18