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

如何获取Windows.Storage命名空间访问权限?(Desktop Bridge转换WinForms应用)

嘿,我刚好处理过类似的桌面桥应用问题,给你一步步讲清楚怎么搞定Windows.Storage的访问:

1. 先搞定UWP API的访问权限(不用传统添加引用)

因为你的WinForms应用是通过Desktop Bridge打包的桌面桥应用,没法直接添加Windows.Storage的引用,得通过NuGet包来启用UWP API的访问:

  • 打开Visual Studio 2017,右键你的WinForms项目 → 选「管理NuGet程序包」
  • 在浏览标签里搜Microsoft.Windows.SDK.Contracts,安装和你的Windows目标版本匹配的包(.NET 4.6.1支持的最低版本大概是10.0.16299.x,选对应版本就行)
  • 装完之后,你就能直接在代码里写using Windows.Storage;来引用这个命名空间了
2. 配置应用的存储权限(关键!)

光有API还不够,得在打包的清单文件里加对应的权限,不然运行时会被拦截:

  • 找到你的Windows Application Packaging Project(就是Desktop Bridge打包用的那个项目),打开它的Package.appxmanifest文件
  • 切到「功能」标签页,勾选你需要的存储权限:
    • 如果只是访问应用自己的本地/漫游/临时文件夹,默认就有权限,不用额外勾选
    • 要访问用户的文档/图片/音乐/视频库?分别勾选对应的「文档库」「图片库」等选项
    • 要是需要访问任意位置的文件,得勾选「文件系统」权限(注意这个权限在商店提交时要说明用途,不然可能被拒)
3. 代码里用Windows.Storage的小提醒

桌面应用调用UWP的异步API时,记得配合async/await:
比如创建并写入一个本地文件的示例代码:

using Windows.Storage;

// 标记方法为async
private async void WriteStorageFile()
{
    // 获取应用本地存储文件夹
    StorageFolder localFolder = ApplicationData.Current.LocalFolder;
    // 异步创建文件(如果存在就替换)
    StorageFile file = await localFolder.CreateFileAsync("test.txt", CreationCollisionOption.ReplaceExisting);
    // 异步写入文本
    await FileIO.WriteTextAsync(file, "这是桌面桥应用写入的内容!");
}
常见坑点排查
  • 装完NuGet包还是找不到Windows.Storage?先确认项目目标框架是.NET Framework 4.6.1,然后清理项目再重新生成试试
  • 权限勾了还是访问不了?检查下你访问的路径是不是在权限范围内(比如没勾文件系统的话,不能直接读C盘根目录的文件)

内容的提问来源于stack exchange,提问作者Chuque

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:19:28