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

从UWP迁移至WinUI非打包MAUI应用时如何恢复本地存储数据?

解决方案:从MSIX打包应用的Windows.Storage路径迁移数据到非打包MAUI应用

核心思路

MSIX打包应用的Windows.Storage.ApplicationData.Current.LocalFolder对应系统固定路径:C:\Users\<当前用户>\AppData\Local\Packages\<旧应用包名>\LocalState。非打包应用可直接通过System.IO API访问该路径,将旧数据迁移到新应用的存储目录。

具体步骤

1. 获取旧MSIX应用的包名

从旧Xamarin UWP项目的Package.appxmanifest文件中,找到Identity节点的Name属性值(例如com.yourcompany.yourapp),这就是旧应用的包名。

2. 构造旧数据的完整路径

在非打包MAUI应用中,通过以下代码拼接旧数据路径:

var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
var oldDataPath = Path.Combine(localAppData, "Packages", "<旧包名>", "LocalState");

3. 迁移数据到新应用目录

在应用启动时执行迁移逻辑,确保用户数据无缝转移:

// 定义新应用的存储目录(可自定义名称)
var newDataPath = Path.Combine(localAppData, "YourNewMAUIApp");
Directory.CreateDirectory(newDataPath);

// 检查旧数据路径是否存在
if (Directory.Exists(oldDataPath))
{
    // 递归复制所有文件和子目录
    foreach (var file in Directory.GetFiles(oldDataPath, "*", SearchOption.AllDirectories))
    {
        var relativePath = Path.GetRelativePath(oldDataPath, file);
        var newFilePath = Path.Combine(newDataPath, relativePath);
        Directory.CreateDirectory(Path.GetDirectoryName(newFilePath));
        File.Copy(file, newFilePath, overwrite: true);
    }

    // 可选:迁移完成后可删除旧目录(需提前提示用户确认)
    // Directory.Delete(oldDataPath, recursive: true);
}

4. 关键注意事项

  • 务必提醒用户:不要先卸载旧MSIX应用再安装新的非打包版本,否则旧数据目录会被系统自动删除,无法恢复。
  • 迁移逻辑只需执行一次,可在新目录下创建一个标记文件(如migrated.flag),避免重复执行。
  • 若用户已卸载旧应用,旧数据无法找回,需提前告知用户迁移的最佳时机。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:22:16