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

WinUI3/MSIX迁移后OneDrive AppFolder重复创建及数据访问问题求助

问题解答

一、为什么相同ClientID会生成新的AppFolder?

OneDrive的.AppFolder并非仅绑定Azure AD的ClientID,而是**ClientID + 应用的Package Family Name(PFN,程序包系列名称)**的组合标识。

原UWP应用和迁移后的WinUI3 MSIX应用,即使ClientID相同,只要PFN不一样,OneDrive就会判定为两个不同的应用实例,从而创建新的AppFolder(后缀加1区分)。PFN由应用包的Publisher和Name字段组合而成,格式为Publisher.Name,如果新MSIX包的这两个字段和原UWP不一致,就会导致PFN变化。

二、如何确保应用升级后能访问原“My App”文件夹?

1. 保持Package Family Name与原UWP完全一致

  • 获取原UWP的PFN:
    • 打开原UWP项目的Package.appxmanifest,查看Identity节点下的Name和Publisher值;
    • 或者在Windows设置→应用和功能中找到原UWP应用,进入高级选项查看“程序包系列名称”。
  • 修改MSIX项目的PFN:
    • 在新WinUI3项目的Package.appxmanifest中,将Identity节点的Name和Publisher设置为和原UWP完全相同的值;
    • 必须使用与原UWP应用相同的代码签名证书打包MSIX,否则Publisher字段会不一致,PFN仍会变化。

2. 验证重定向URI与Broker配置

  • 在Azure AD应用注册中,同时保留原UWP的重定向URI(格式通常为ms-app://<原PFN>)和新MSIX应用的重定向URI(ms-appx-web://microsoft.aad.brokerplugin/<ClientId>);
  • 确保代码中的Broker配置正确,窗口句柄传递无误:
    var options = new BrokerOptions(BrokerOptions.OperatingSystems.Windows);
    var clientApp = PublicClientApplicationBuilder.Create(_clientId)
        .WithRedirectUri($"ms-appx-web://microsoft.aad.brokerplugin/{_clientId}")
        .WithParentActivityOrWindow(() => hwnd) // 确保此处hwnd是当前应用窗口的有效句柄
        .WithBroker(options)
        .Build();
    

3. 确认Graph SDK的权限与调用逻辑

  • 确保请求的权限仍为Files.ReadWrite.AppFolder,与原UWP应用一致;
  • 访问AppFolder时,使用针对当前用户的OneDrive端点,避免误访问团队站点:
    var appRootFolder = await graphClient.Me.Drive.Special["approot"].Request().GetAsync();
    

4. 彻底清除缓存并重新登录

  • 删除新MSIX应用的本地缓存目录:C:\Users\<你的用户名>\AppData\Local\Packages\<新PFN>;
  • 清除MSAL令牌缓存(可以通过删除应用的TokenCache文件,或代码中调用clientApp.RemoveAsync(account));
  • 重新启动应用,使用交互式登录流程获取新令牌,确保令牌中的azp(客户端ID)和appid与原应用一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:05:09