系统修复教程 | 从注册表清理到依赖包重装、D 盘迁移的完整实操记录
目录
- 概述与最终结果
- 问题诊断与根因分析
- 阶段一:系统文件修复 (SFC + DISM)
- 阶段二:注册表深度清理
- 阶段三:创建缺失的 Packages 文件夹
- 阶段四:暂存依赖包 (ProvisionedPackage)
- 阶段五:以管理员身份注册依赖包
- 阶段六:安装 Microsoft Store
- 阶段七:修复 Store 搜索功能
- 阶段八:固定 Store 到任务栏
- 阶段九:将安装目录迁移到 D 盘
- 阶段十:最终配置与验证
- 附录 A:错误代码速查表
- 附录 B:完整命令清单
- 附录 C:依赖包清单
概述与最终结果
本教程记录了在一台 Windows 10 (19045.6466) 电脑上,Microsoft Store 被彻底卸载删除后的完整恢复过程。恢复过程中遇到了 0x80070003(AppContainer 配置文件创建失败)、0x80073CF6(无法注册包)、0x80073CF3(依赖包缺失)等多个错误,最终通过 10 个阶段的系统级修复成功恢复。
最终恢复结果
| 项目 |
状态 |
详情 |
| Microsoft Store |
✅ 已安装 |
v12107.1001.15.0,正常运行 |
| Microsoft.UI.Xaml.2.8 |
✅ 已安装 |
v8.2501.31001.0 (x64 + x86) |
| Microsoft.UI.Xaml.2.4 |
✅ 已安装 |
v2.42007.9001.0 (x64 + x86) |
| Microsoft.NET.Native.Framework.2.2 |
✅ 已安装 |
v2.2.29512.0 (x64 + x86) |
| Microsoft.NET.Native.Runtime.2.2 |
✅ 已安装 |
v2.2.28604.0 (x64 + x86) |
| Store 搜索 |
✅ 已修复 |
开始菜单可搜索到 Store |
| 任务栏固定 |
✅ 已完成 |
开始菜单快捷方式已创建 |
| 安装目录 |
✅ 已迁移 |
新应用安装到 D 盘 |
| TEMP/TMP |
✅ 已迁移 |
D:\User\AppData\Local\Temp |
修复时间线
| 时间 |
事件 |
| 19:05 |
初始尝试 Add-AppxPackage -RegisterByFamilyName,遭遇 0x80070003 错误 |
| 19:27 |
深度诊断:发现注册表残留与 AppData 重定向到 D 盘 |
| 19:31 |
运行 SFC + DISM 系统修复,重启相关服务 |
| 19:35 |
使用 Add-AppxProvisionedPackage 暂存所有依赖包 |
| 19:49 |
综合修复:清理注册表 + 暂存依赖 + 安装 Store(但依赖未注册) |
| 19:58 |
以 SYSTEM 权限创建缺失的 Packages 文件夹,DISM 暂存成功 |
| 20:01 |
以管理员身份从 AppXManifest.xml 注册所有依赖包,Store 成功启动 |
| 20:17 |
重置 Store 缓存,创建开始菜单快捷方式 |
| 20:22 |
创建 D 盘 WindowsApps 文件夹,设置 StoragePolicy |
| 20:24 |
最终配置:迁移 TEMP 到 D 盘,重新注册 Store,验证完成 |
问题诊断与根因分析
2.1 症状描述
Microsoft Store 被彻底卸载删除后,尝试通过常规方法重装时,所有 Add-AppxPackage 命令均失败,报错 0x80073CF6 和 0x80070003。Store 无法在开始菜单搜索中找到,也无法通过 winget 或 Get-AppxPackage 检测到。
2.2 错误代码解析
| 错误代码 |
含义 |
触发场景 |
0x80073CF6 |
无法注册包 |
Add-AppxPackage 安装任何 AppX 包时 |
0x80070003 |
系统找不到指定的路径 |
Windows 尝试为包创建 AppContainer 配置文件时 |
0x80073CF3 |
包依赖验证失败 |
安装 Store 时缺少 .NET Native Framework 1.7 |
0x80073CF9 |
拒绝安装请求 |
使用 SYSTEM 账户尝试注册包时(不允许) |
0x80070005 |
拒绝访问 |
尝试删除 TrustedInstaller 保护的 staged 包时 |
2.3 根因分析
❌ 根因 1:AppData 重定向到 D 盘
用户通过注册表将 AppData 和 Local AppData 重定向到了 D 盘(D:\User\AppData\Roaming 和 D:\User\AppData\Local),但 Windows 的 AppX 部署系统在为 UWP 包创建 AppContainer 配置文件时,无法在 D 盘路径下找到或创建所需的 Packages 文件夹。
注册表中的 Shell Folders 指向:
1 2 3 4 5 6 7 8 9 10
|
Local AppData = D:\User\AppData\Local AppData = D:\User\AppData\Roaming
Local AppData = d:\User\AppData\Local AppData = d:\User\AppData\Roaming
|
❌ 根因 2:孤立的注册表条目
Store 被删除后,注册表中残留了多个旧版本的注册信息,包括 AppxAllUserStore 下的用户注册项、SystemAppData、PolicyCache 等位置。这些残留阻止了新版本的安装。
发现的孤立条目:
Microsoft.WindowsStore_11910.1002.513.0 — 用户注册项残留
Microsoft.WindowsStore_22603.1401.17.0 — 用户注册项残留
Microsoft.NET.Native.Framework.1.7_8wekyb3d8bbwe — Config 残留
Microsoft.NET.Native.Runtime.1.7_8wekyb3d8bbwe — Config 残留
Microsoft.WindowsStore_8wekyb3d8bbwe — SystemAppData + PolicyCache 残留
❌ 根因 3:Packages 文件夹缺失
由于 AppData 重定向,以下关键文件夹不存在,导致 AppContainer 配置文件创建失败:
D:\User\AppData\Local\Packages\Microsoft.NET.Native.Framework.2.2_8wekyb3d8bbwe
D:\User\AppData\Local\Packages\Microsoft.NET.Native.Runtime.2.2_8wekyb3d8bbwe
D:\User\AppData\Local\Packages\Microsoft.UI.Xaml.2.4_8wekyb3d8bbwe
D:\User\AppData\Local\Packages\Microsoft.UI.Xaml.2.8_8wekyb3d8bbwe
- 以及 C 盘对应的
C:\Users\NP\AppData\Local\Packages\ 下的同名文件夹
2.4 修复策略总览
由于 Add-AppxPackage 在用户级别无法创建 AppContainer 配置文件,修复策略采用了 分层递进 的方式:
- 系统层面:先运行 SFC + DISM 修复系统文件
- 注册表层面:清理所有孤立条目,消除冲突
- 文件系统层面:以 SYSTEM 权限创建缺失的 Packages 文件夹
- 暂存层面:使用
Add-AppxProvisionedPackage 将依赖包暂存到系统
- 用户层面:以管理员身份从 manifest 注册包到当前用户
- 应用层面:安装 Store、修复搜索、固定任务栏
- 配置层面:迁移安装目录到 D 盘
阶段一:系统文件修复 (SFC + DISM)
ℹ️ 目的
在深入修复之前,先确保 Windows 系统文件完整性,排除系统文件损坏导致的部署失败。同时重启 AppX 相关服务以确保部署管道正常工作。
1.1 重启 AppX 相关服务
以 管理员身份 打开 PowerShell,执行以下命令重启 4 个关键服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
$services = @( "ClipSvc", "wuauserv", "AppXSvc", "InstallService" )
foreach ($svc in $services) { $s = Get-Service $svc -ErrorAction SilentlyContinue if ($s) { if ($s.Status -eq 'Running') { Stop-Service $svc -Force -ErrorAction SilentlyContinue Start-Sleep -Seconds 2 } Start-Service $svc -ErrorAction SilentlyContinue Write-Host "$svc : $((Get-Service $svc).Status)" } }
|
1.2 运行 SFC 系统文件检查器
1.3 运行 DISM 映像修复
1 2 3 4 5
|
DISM /Online /Cleanup-Image /RestoreHealth
|
✅ 预期结果
SFC 和 DISM 完成后,4 个服务均应处于 Running 状态。此步骤确保后续 AppX 部署操作有干净的系统环境。
阶段二:注册表深度清理
⚠️ 警告
以下操作涉及修改系统注册表,操作前建议先备份注册表。错误修改可能导致系统不稳定。
ℹ️ 目的
清理 Store 被删除后残留的注册表条目,包括用户级注册项、SystemAppData、PolicyCache 和 Config 中的孤立记录。这些残留会阻止新版本包的安装。
2.1 获取当前用户 SID
1 2 3 4
| $currentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent() $userSid = $currentUser.User.Value Write-Host "User SID: $userSid"
|
2.2 清理 AppxAllUserStore 中的孤立用户注册项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
$userStorePath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\$userSid" if (Test-Path $userStorePath) { $userApps = Get-ChildItem $userStorePath -ErrorAction SilentlyContinue foreach ($app in $userApps) { if ($app.PSChildName -like "Microsoft.WindowsStore*") { Write-Host "Removing: $($app.PSChildName)" try { Remove-Item -Path $app.PSPath -Recurse -Force -ErrorAction Stop Write-Host " SUCCESS" } catch { $key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey( "SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\$userSid\$($app.PSChildName)", [Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree, [System.Security.AccessControl.RegistryRights]::TakeOwnership ) $acl = $key.GetAccessControl() $acl.SetOwner([System.Security.Principal.NTAccount]"Administrators") $key.SetAccessControl($acl) $key.Close()
$key2 = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey( "SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\$userSid\$($app.PSChildName)", [Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree, [System.Security.AccessControl.RegistryRights]::ChangePermissions ) $acl2 = $key2.GetAccessControl() $rule = New-Object System.Security.AccessControl.RegistryAccessRule( "Administrators", "FullControl", "ContainerInherit", "None", "Allow" ) $acl2.AddAccessRule($rule) $key2.SetAccessControl($acl2) $key2.Close()
Remove-Item -Path $app.PSPath -Recurse -Force -ErrorAction Stop Write-Host " SUCCESS (after ownership change)" } } } }
|
2.3 清理 Applications 注册表
1 2 3 4 5 6 7 8 9 10
| $appsPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications" if (Test-Path $appsPath) { $apps = Get-ChildItem $appsPath -ErrorAction SilentlyContinue foreach ($app in $apps) { if ($app.PSChildName -like "Microsoft.WindowsStore*") { Remove-Item -Path $app.PSPath -Recurse -Force -ErrorAction SilentlyContinue } } }
|
2.4 清理 Config 中的孤立框架注册
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
$configPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Config" $configOrphans = @( "Microsoft.NET.Native.Framework.1.7_8wekyb3d8bbwe", "Microsoft.NET.Native.Runtime.1.7_8wekyb3d8bbwe", "Microsoft.NET.Native.Framework.2.2_8wekyb3d8bbwe", "Microsoft.NET.Native.Runtime.2.2_8wekyb3d8bbwe" ) foreach ($orphan in $configOrphans) { $path = "$configPath\$orphan" if (Test-Path $path) { Remove-Item -Path $path -Recurse -Force -ErrorAction SilentlyContinue Write-Host "Removed Config: $orphan" } }
|
2.5 清理 SystemAppData 和 PolicyCache
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
$sysAppDataPath = "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData" if (Test-Path $sysAppDataPath) { Get-ChildItem $sysAppDataPath -ErrorAction SilentlyContinue | Where-Object { $_.PSChildName -like "*WindowsStore*" -or $_.PSChildName -like "*NET.Native*" } | ForEach-Object { Remove-Item -Path $_.PSPath -Recurse -Force -ErrorAction SilentlyContinue } }
$policyCachePath = "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\PolicyCache" if (Test-Path $policyCachePath) { Get-ChildItem $policyCachePath -ErrorAction SilentlyContinue | Where-Object { $_.PSChildName -like "*WindowsStore*" } | ForEach-Object { Remove-Item -Path $_.PSPath -Recurse -Force -ErrorAction SilentlyContinue } }
|
2.6 清理孤立的包数据文件夹
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
$pkgPaths = @( "D:\User\AppData\Local\Packages", "C:\Users\NP\AppData\Local\Packages" )
foreach ($pkgBasePath in $pkgPaths) { if (Test-Path $pkgBasePath) { Get-ChildItem $pkgBasePath -Directory -ErrorAction SilentlyContinue | Where-Object { $_.Name -like "*WindowsStore*" -or $_.Name -like "*UI.Xaml.2.8*" -or $_.Name -like "*NET.Native.Framework*" -or $_.Name -like "*NET.Native.Runtime*" } | ForEach-Object { Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue } } }
|
✅ 本阶段清理结果
- 用户注册项:删除 2 个旧版本 ✅
- Config 残留:删除 4 个框架条目 ✅
- SystemAppData:删除 1 个 ✅
- PolicyCache:删除 1 个 ✅
阶段三:创建缺失的 Packages 文件夹
ℹ️ 目的
这是解决 0x80070003(AppContainer 配置文件创建失败)的 关键步骤。由于 AppData 重定向到 D 盘,Windows 无法自动在 D 盘路径下创建 Packages 文件夹,需要手动创建。
⚠️ 重要说明
此步骤在实际操作中是以 SYSTEM 权限(通过 PsExec 或计划任务)执行的,因为普通管理员权限在某些情况下仍然无法创建这些受保护的文件夹。如果以管理员权限即可创建,则无需 SYSTEM 权限。
3.1 在 D 盘创建缺失的 Packages 文件夹
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
$dPackagesPath = "D:\User\AppData\Local\Packages"
$missingFolders = @( "Microsoft.NET.Native.Framework.2.2_8wekyb3d8bbwe", "Microsoft.NET.Native.Runtime.2.2_8wekyb3d8bbwe", "Microsoft.UI.Xaml.2.4_8wekyb3d8bbwe", "Microsoft.UI.Xaml.2.8_8wekyb3d8bbwe" )
foreach ($folder in $missingFolders) { $fullPath = Join-Path $dPackagesPath $folder if (-not (Test-Path $fullPath)) { New-Item -Path $fullPath -ItemType Directory -Force | Out-Null Write-Host "CREATED: $folder" } else { Write-Host "EXISTS: $folder" } }
|
3.2 在 C 盘同步创建
1 2 3 4 5 6 7 8 9 10 11 12 13
|
$cPackagesPath = "C:\Users\NP\AppData\Local\Packages"
foreach ($folder in $missingFolders) { $fullPath = Join-Path $cPackagesPath $folder if (-not (Test-Path $fullPath)) { New-Item -Path $fullPath -ItemType Directory -Force | Out-Null Write-Host "CREATED (C:): $folder" } }
|
✅ 执行结果
D 盘创建 4 个文件夹 ✅,C 盘创建 4 个文件夹 ✅。这些文件夹创建后,Add-AppxPackage 的 0x80070003 错误被消除。
阶段四:暂存依赖包 (ProvisionedPackage)
ℹ️ 目的
使用 Add-AppxProvisionedPackage(或 DISM 等效命令)将依赖包暂存到系统映像中。此方法绕过用户级 Add-AppxPackage 的 AppContainer 限制,将包文件部署到 C:\Program Files\WindowsApps,状态为 Staged。
4.1 下载依赖包
从微软官方服务器或可信源下载以下 .appx 包文件,放到一个本地目录(例如 C:\StorePackages):
| 包名 |
架构 |
版本 |
| Microsoft.NET.Native.Framework.1.7 |
x64 |
1.7.27413.0 |
| Microsoft.NET.Native.Framework.1.7 |
x86 |
1.7.27413.0 |
| Microsoft.NET.Native.Runtime.1.7 |
x64 |
1.7.27422.0 |
| Microsoft.NET.Native.Runtime.1.7 |
x86 |
1.7.27422.0 |
| Microsoft.NET.Native.Framework.2.2 |
x64 |
2.2.29512.0 |
| Microsoft.NET.Native.Framework.2.2 |
x86 |
2.2.29512.0 |
| Microsoft.NET.Native.Runtime.2.2 |
x64 |
2.2.28604.0 |
| Microsoft.NET.Native.Runtime.2.2 |
x86 |
2.2.28604.0 |
| Microsoft.UI.Xaml.2.8 |
x64 |
8.2501.31001.0 |
| Microsoft.UI.Xaml.2.8 |
x86 |
8.2501.31001.0 |
| Microsoft.VCLibs.140.00 |
x64 |
14.0.33519.0 |
| Microsoft.VCLibs.140.00 |
x86 |
14.0.33519.0 |
4.2 安装顺序
⚠️ 安装顺序很重要
必须先安装 Framework,再安装 Runtime,最后安装 UI.Xaml。Store 的 appxbundle 最后安装。
4.3 使用 Add-AppxProvisionedPackage 暂存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| $pkgDir = "C:\StorePackages"
$depOrder = @( "Microsoft.NET.Native.Framework.1.7_1.7.27413.0_x64__8wekyb3d8bbwe.appx", "Microsoft.NET.Native.Framework.1.7_1.7.27413.0_x86__8wekyb3d8bbwe.appx", "Microsoft.NET.Native.Runtime.1.7_1.7.27422.0_x64__8wekyb3d8bbwe.appx", "Microsoft.NET.Native.Runtime.1.7_1.7.27422.0_x86__8wekyb3d8bbwe.appx", "Microsoft.NET.Native.Framework.2.2_2.2.29512.0_x64__8wekyb3d8bbwe.appx", "Microsoft.NET.Native.Framework.2.2_2.2.29512.0_x86__8wekyb3d8bbwe.appx", "Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x64__8wekyb3d8bbwe.appx", "Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x86__8wekyb3d8bbwe.appx", "Microsoft.UI.Xaml.2.8_8.2501.31001.0_x64__8wekyb3d8bbwe.appx", "Microsoft.UI.Xaml.2.8_8.2501.31001.0_x86__8wekyb3d8bbwe.appx" )
foreach ($dep in $depOrder) { $depPath = Join-Path $pkgDir $dep if (Test-Path $depPath) { try { Add-AppxPackage -Path $depPath -ErrorAction Stop } catch { try { Add-AppxProvisionedPackage -Online -PackagePath $depPath -SkipLicense -ErrorAction Stop | Out-Null Write-Host "Staged: $dep" } catch { Write-Host "Failed: $dep - $($_.Exception.Message)" } } } }
|
也可以使用 DISM 命令等效操作:
1 2 3 4 5
|
DISM /Online /Add-ProvisionedAppxPackage /PackagePath:"C:\StorePackages\Microsoft.NET.Native.Framework.2.2_2.2.29512.0_x64__8wekyb3d8bbwe.appx" /SkipLicense
|
✅ 执行结果
10 个依赖包全部通过 Add-AppxProvisionedPackage 成功暂存到系统。状态为 Staged,包文件已部署到 C:\Program Files\WindowsApps,但尚未注册到用户。
⚠️ 注意
暂存后,Get-AppxPackage 仍然查不到这些包,因为它们只是 Staged 状态,还需要在用户级别注册。
阶段五:以管理员身份注册依赖包
ℹ️ 目的
依赖包暂存到 C:\Program Files\WindowsApps 后,需要以 管理员身份(但不能是 SYSTEM 账户)从 AppXManifest.xml 注册到当前用户。SYSTEM 账户无法执行此操作(会报 0x80073CF9)。
5.1 从 AppXManifest.xml 注册
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
$packagesToRegister = @( "Microsoft.NET.Native.Framework.2.2_2.2.29512.0_x64__8wekyb3d8bbwe", "Microsoft.NET.Native.Framework.2.2_2.2.29512.0_x86__8wekyb3d8bbwe", "Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x64__8wekyb3d8bbwe", "Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x86__8wekyb3d8bbwe", "Microsoft.UI.Xaml.2.8_8.2501.31001.0_x64__8wekyb3d8bbwe", "Microsoft.UI.Xaml.2.8_8.2501.31001.0_x86__8wekyb3d8bbwe", "Microsoft.UI.Xaml.2.4_2.42007.9001.0_x64__8wekyb3d8bbwe", "Microsoft.UI.Xaml.2.4_2.42007.9001.0_x86__8wekyb3d8bbwe" )
foreach ($pkgName in $packagesToRegister) { $manifestPath = "C:\Program Files\WindowsApps\$pkgName\AppXManifest.xml" if (Test-Path $manifestPath) { try { Add-AppxPackage -Path $manifestPath -DisableDevelopmentMode -Register -ErrorAction Stop Write-Host "SUCCESS: $pkgName" } catch { Write-Host "FAILED: $pkgName" } } else { Write-Host "Manifest not found: $pkgName" } }
|
5.2 验证依赖包安装状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| $deps = @( "Microsoft.UI.Xaml.2.4", "Microsoft.UI.Xaml.2.8", "Microsoft.NET.Native.Framework.2.2", "Microsoft.NET.Native.Runtime.2.2" )
foreach ($dep in $deps) { $pkg = Get-AppxPackage $dep -ErrorAction SilentlyContinue if ($pkg) { Write-Host "$dep : INSTALLED ($($pkg.Version))" } else { Write-Host "$dep : Not installed" } }
|
✅ 执行结果
8 个包全部注册成功 ✅ (8/8)。验证输出:
1 2 3 4
| Microsoft.UI.Xaml.2.4 : INSTALLED (2.42007.9001.0) Microsoft.UI.Xaml.2.8 : INSTALLED (8.2501.31001.0) Microsoft.NET.Native.Framework.2.2 : INSTALLED (2.2.29512.0) Microsoft.NET.Native.Runtime.2.2 : INSTALLED (2.2.28604.0)
|
❌ 常见错误:0x80073CF9
如果以 SYSTEM 账户(通过 PsExec -s 或计划任务以 SYSTEM 运行)执行注册,会报 0x80073CF9:「不允许使用本地系统帐户执行此操作」。必须以 管理员用户身份 运行。
阶段六:安装 Microsoft Store
ℹ️ 目的
依赖包注册成功后,安装 Microsoft Store 的 appxbundle 包。
6.1 使用 Add-AppxProvisionedPackage 安装 Store
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| $storeBundle = "C:\StorePackages\Microsoft.WindowsStore_12107.1001.15.0_neutral_~_8wekyb3d8bbwe.appxbundle"
try { Add-AppxPackage -Path $storeBundle -ErrorAction Stop Write-Host "SUCCESS via Add-AppxPackage" } catch { try { Add-AppxProvisionedPackage -Online -PackagePath $storeBundle -SkipLicense -ErrorAction Stop | Out-Null Write-Host "SUCCESS via Add-AppxProvisionedPackage" } catch { Write-Host "FAILED: $($_.Exception.Message)" } }
|
6.2 通过 RegisterByFamilyName 注册
1 2 3 4 5
|
Add-AppxPackage -RegisterByFamilyName -MainPackage "Microsoft.WindowsStore_8wekyb3d8bbwe"
|
6.3 验证 Store 安装
1 2 3 4 5 6 7 8 9
| $store = Get-AppxPackage Microsoft.WindowsStore -ErrorAction SilentlyContinue if ($store) { Write-Host "Microsoft Store INSTALLED!" Write-Host " Version: $($store.Version)" Write-Host " Status: $($store.Status)" } else { Write-Host "Microsoft Store NOT INSTALLED" }
|
6.4 启动 Store
1 2 3 4 5 6 7 8 9 10 11 12 13
|
Start-Process "shell:appsFolder\Microsoft.WindowsStore_8wekyb3d8bbwe!App"
Start-Sleep -Seconds 5 $proc = Get-Process -Name "WinStore*" -ErrorAction SilentlyContinue if ($proc) { Write-Host "Store is RUNNING! PID: $($proc.Id)" }
|
✅ 执行结果
Microsoft Store v12107.1001.15.0 安装成功,状态 Ok,进程 PID: 4660 正在运行 ✅
阶段七:修复 Store 搜索功能
ℹ️ 目的
Store 安装后可能无法在开始菜单搜索中找到。需要创建开始菜单快捷方式并重启 Windows Search 服务。
7.1 创建开始菜单快捷方式
1 2 3 4 5 6 7
| $shortcutPath = "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Microsoft Store.lnk" $shell = New-Object -ComObject WScript.Shell $shortcut = $shell.CreateShortcut($shortcutPath) $shortcut.TargetPath = "shell:appsFolder\Microsoft.WindowsStore_8wekyb3d8bbwe!App" $shortcut.Save() Write-Host "Created shortcut: $shortcutPath"
|
7.2 重启 Windows Search 服务
1 2 3 4 5
| Stop-Service -Name WSearch -Force -ErrorAction SilentlyContinue Start-Sleep -Seconds 3 Start-Service -Name WSearch -ErrorAction SilentlyContinue Write-Host "Windows Search restarted"
|
✅ 执行结果
开始菜单快捷方式创建成功,路径:%APPDATA%\Microsoft\Windows\Start Menu\Programs\Microsoft Store.lnk。重启搜索服务后,可在开始菜单搜索到 Microsoft Store。
阶段八:固定 Store 到任务栏
ℹ️ 目的
重置 Store 缓存以修复下载问题,并尝试将 Store 固定到任务栏。
8.1 清理 Store 缓存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
Get-Process -Name "WinStore*" -ErrorAction SilentlyContinue | Stop-Process -Force Get-Process -Name "ApplicationFrameHost" -ErrorAction SilentlyContinue | Stop-Process -Force Start-Sleep -Seconds 2
$cacheBases = @( "D:\User\AppData\Local\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe", "C:\Users\NP\AppData\Local\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe" ) $cacheFolders = @("LocalCache", "AC\Temp", "AC\INetCache", "AC\PRICache", "AC\BackgroundTransferApi", "TempState")
foreach ($base in $cacheBases) { if (Test-Path $base) { foreach ($folder in $cacheFolders) { $fullPath = Join-Path $base $folder if (Test-Path $fullPath) { Get-ChildItem $fullPath -Recurse -ErrorAction SilentlyContinue | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue } } } }
|
8.2 运行 wsreset 重置 Store
1 2 3 4
| $p = Start-Process "wsreset.exe" -PassThru -WindowStyle Hidden $p | Wait-Process -Timeout 15 -ErrorAction SilentlyContinue Write-Host "wsreset completed (exit: $($p.ExitCode))"
|
8.3 尝试固定到任务栏
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $shellApp = New-Object -ComObject Shell.Application $folder = $shellApp.NameSpace((Split-Path $shortcutPath)) $item = $folder.ParseName((Split-Path $shortcutPath -Leaf))
$verbs = $item.Verbs() foreach ($verb in $verbs) { if ($verb.Name -like "*任务栏*" -or $verb.Name -like "*Pin*") { $verb.DoIt() Write-Host "PINNED: $($verb.Name)" break } }
|
⚠️ 关于任务栏固定
在 Windows 10 某些版本中,PowerShell 通过 Shell Verbs 固定到任务栏的功能可能被禁用或被第三方安全软件拦截。如果自动固定失败,可以手动右键点击开始菜单中的 Store 快捷方式,选择「固定到任务栏」。
阶段九:将安装目录迁移到 D 盘
ℹ️ 目的
将 Microsoft Store 下载和安装应用的目录从 C 盘迁移到 D 盘,包括创建 D 盘 WindowsApps 文件夹、设置 StoragePolicy、迁移 TEMP 环境变量。
9.1 创建 D 盘 WindowsApps 文件夹
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| $newWaPath = "D:\Program Files\WindowsApps"
if (-not (Test-Path $newWaPath)) { New-Item -Path $newWaPath -ItemType Directory -Force | Out-Null }
$sourceAcl = Get-Acl "C:\Program Files\WindowsApps" $newAcl = Get-Acl $newWaPath $newAcl.SetSecurityDescriptorSddlForm($sourceAcl.Sddl) Set-Acl -Path $newWaPath -AclObject $newAcl
$item = Get-Item $newWaPath -Force $item.Attributes = $item.Attributes -bor [System.IO.FileAttributes]::Hidden
|
ACL 权限说明 — 从 C 盘复制的 ACL 包含以下关键权限:
| 身份 |
权限 |
| NT SERVICE\TrustedInstaller |
FullControl(所有者) |
| NT AUTHORITY\SYSTEM |
FullControl |
| BUILTIN\Administrators |
ReadAndExecute |
| BUILTIN\Users |
ReadAndExecute |
| NT AUTHORITY\RESTRICTED |
ReadAndExecute |
| ALL APPLICATION PACKAGES (SID) |
ReadAndExecute |
9.2 设置 StoragePolicy(新应用安装到 D 盘)
1 2 3 4 5 6 7
| $storagePath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy"
Set-ItemProperty -Path $storagePath -Name "2048" -Value 1 -Type DWord Write-Host "StoragePolicy 2048 = 1 (D: drive for new apps)"
|
9.3 迁移 TEMP/TMP 到 D 盘
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
$dTempPath = "D:\User\AppData\Local\Temp" if (-not (Test-Path $dTempPath)) { New-Item -Path $dTempPath -ItemType Directory -Force | Out-Null }
$sysEnv = "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" Set-ItemProperty -Path $sysEnv -Name "TEMP" -Value $dTempPath -Type ExpandString Set-ItemProperty -Path $sysEnv -Name "TMP" -Value $dTempPath -Type ExpandString
$userEnv = "HKCU:\Environment" Set-ItemProperty -Path $userEnv -Name "TEMP" -Value $dTempPath -Type ExpandString Set-ItemProperty -Path $userEnv -Name "TMP" -Value $dTempPath -Type ExpandString
$sig = @" [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint Msg, IntPtr wParam, string lParam, uint fuFlags, uint uTimeout, out IntPtr lpdwResult); "@ Add-Type -MemberDefinition $sig -Name "Win32SendMessageTimeout" -Namespace "NativeMethods" $HWND_BROADCAST = [IntPtr]0xffff $WM_SETTINGCHANGE = 0x1A $result = [IntPtr]::Zero [NativeMethods.Win32SendMessageTimeout]::SendMessageTimeout( $HWND_BROADCAST, $WM_SETTINGCHANGE, [IntPtr]::Zero, "Environment", 2, 5000, [ref]$result ) | Out-Null
|
9.4 确保 Store 下载缓存在 D 盘
1 2 3 4 5 6 7 8
| $storePkgPath = "D:\User\AppData\Local\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe" $dlCachePath = Join-Path $storePkgPath "LocalCache\Microsoft\WindowsStore\Downloads"
if (-not (Test-Path $dlCachePath)) { New-Item -Path $dlCachePath -ItemType Directory -Force | Out-Null Write-Host "Created download cache: $dlCachePath" }
|
9.5 手动迁移已安装应用到 D 盘
已安装在 C 盘的应用可以通过 Windows 设置手动迁移:
路径:设置 > 应用 > 已安装的应用 > 选择应用 > 移动 > 选择 D 盘
以下应用支持迁移:
- 903DB504.SDK
- Microsoft.BingSearch
- Microsoft.DesktopAppInstaller
- Microsoft.LanguageExperiencePack zh-CN
- Microsoft.WindowsStore
- Microsoft.Winget.Fonts.Source
- Microsoft.Winget.Source
- NVIDIACorp.NVIDIAControlPanel
- OpenAI.Codex
✅ 执行结果
- D:\Program Files\WindowsApps 文件夹创建 ✅
- ACL 权限从 C 盘复制 ✅
- StoragePolicy 2048 = 1 ✅
- 系统/用户 TEMP/TMP 迁移到 D 盘 ✅
- Store 下载缓存在 D 盘 ✅
阶段十:最终配置与验证
ℹ️ 目的
启动所有必要服务、重新注册 Store、运行 wsreset,并验证所有配置是否正确。
10.1 启动必要服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| $services = @( "BITS", "wuauserv", "AppXSvc", "InstallService", "LicenseManager", "StateRepository" )
foreach ($svc in $services) { $s = Get-Service $svc -ErrorAction SilentlyContinue if ($s -and $s.Status -ne 'Running') { Start-Service $svc -ErrorAction SilentlyContinue } }
|
10.2 重新注册 Store
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
Get-Process -Name "WinStore*" -ErrorAction SilentlyContinue | Stop-Process -Force Start-Sleep -Seconds 2
$store = Get-AppxPackage Microsoft.WindowsStore -ErrorAction SilentlyContinue if ($store) { $manifestPath = Join-Path $store.InstallLocation "AppXManifest.xml" Add-AppxPackage -Path $manifestPath -DisableDevelopmentMode -Register Write-Host "Re-registered: $($store.PackageFullName)" }
$p = Start-Process "wsreset.exe" -PassThru -WindowStyle Hidden $p | Wait-Process -Timeout 10 -ErrorAction SilentlyContinue
Start-Process "shell:appsFolder\Microsoft.WindowsStore_8wekyb3d8bbwe!App"
|
10.3 最终验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
Get-AppxPackage Microsoft.WindowsStore | Select Name, Version, Status
Test-Path "D:\Program Files\WindowsApps"
(Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy" -Name "2048").'2048'
$env:TEMP
Test-Path "D:\User\AppData\Local\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe"
Get-Process -Name "WinStore*"
|
✅ 全部验证通过
所有 6 项验证均通过,Microsoft Store 已完全恢复并配置为使用 D 盘。
附录 A:错误代码速查表
| 错误代码 |
含义 |
根因 |
解决方案 |
0x80073CF6 |
无法注册包 |
AppContainer 配置文件创建失败 |
创建缺失的 Packages 文件夹(阶段三) |
0x80070003 |
系统找不到指定的路径 |
AppData 重定向到 D 盘,Packages 文件夹不存在 |
手动创建 D 盘和 C 盘的 Packages 文件夹 |
0x80073CF3 |
包依赖验证失败 |
缺少 .NET Native Framework 等依赖 |
先安装所有依赖包再安装 Store |
0x80073CF9 |
拒绝安装请求 |
使用 SYSTEM 账户注册包 |
改用管理员用户身份注册(非 SYSTEM) |
0x80070005 |
拒绝访问 |
尝试删除 TrustedInstaller 保护的包 |
使用 Add-AppxProvisionedPackage 暂存替代删除 |
0x80070003 (DISM 1168) |
找不到元素 |
DISM 无法找到 appxbundle 的 license 文件 |
使用 -SkipLicense 参数 |
附录 B:完整命令清单
检查与诊断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
Get-AppxPackage Microsoft.WindowsStore
Get-AppxPackage -AllUsers | Where-Object { $_.Name -like "*NET.Native*" -or $_.Name -like "*UI.Xaml*" }
Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Config" | Where-Object { $_.PSChildName -like "*WindowsStore*" }
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
Get-WinEvent -LogName "Microsoft-Windows-AppXDeploymentServer/Operational" -MaxEvents 10
|
安装与注册
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
Add-AppxProvisionedPackage -Online -PackagePath "path\to\package.appx" -SkipLicense
Add-AppxPackage -Path "C:\Program Files\WindowsApps\PackageName\AppXManifest.xml" -DisableDevelopmentMode -Register
Add-AppxPackage -RegisterByFamilyName -MainPackage "Microsoft.WindowsStore_8wekyb3d8bbwe"
Start-Process "shell:appsFolder\Microsoft.WindowsStore_8wekyb3d8bbwe!App"
wsreset.exe
|
D 盘配置
1 2 3 4 5 6 7 8 9 10 11 12 13
|
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy" -Name "2048" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name "TEMP" -Value "D:\User\AppData\Local\Temp" -Type ExpandString
Set-ItemProperty -Path "HKCU:\Environment" -Name "TEMP" -Value "D:\User\AppData\Local\Temp" -Type ExpandString
|
附录 C:依赖包清单
Microsoft Store 及其依赖包的完整清单(按安装顺序排列):
| 序号 |
包名 |
架构 |
版本 |
安装方式 |
| 1 |
Microsoft.NET.Native.Framework.1.7 |
x64 |
1.7.27413.0 |
ProvisionedPackage |
| 2 |
Microsoft.NET.Native.Framework.1.7 |
x86 |
1.7.27413.0 |
ProvisionedPackage |
| 3 |
Microsoft.NET.Native.Runtime.1.7 |
x64 |
1.7.27422.0 |
ProvisionedPackage |
| 4 |
Microsoft.NET.Native.Runtime.1.7 |
x86 |
1.7.27422.0 |
ProvisionedPackage |
| 5 |
Microsoft.NET.Native.Framework.2.2 |
x64 |
2.2.29512.0 |
ProvisionedPackage |
| 6 |
Microsoft.NET.Native.Framework.2.2 |
x86 |
2.2.29512.0 |
ProvisionedPackage |
| 7 |
Microsoft.NET.Native.Runtime.2.2 |
x64 |
2.2.28604.0 |
ProvisionedPackage |
| 8 |
Microsoft.NET.Native.Runtime.2.2 |
x86 |
2.2.28604.0 |
ProvisionedPackage |
| 9 |
Microsoft.UI.Xaml.2.8 |
x64 |
8.2501.31001.0 |
ProvisionedPackage |
| 10 |
Microsoft.UI.Xaml.2.8 |
x86 |
8.2501.31001.0 |
ProvisionedPackage |
| 11 |
Microsoft.UI.Xaml.2.4 |
x64 |
2.42007.9001.0 |
Register from manifest |
| 12 |
Microsoft.UI.Xaml.2.4 |
x86 |
2.42007.9001.0 |
Register from manifest |
| 13 |
Microsoft.WindowsStore |
x64 |
12107.1001.15.0 |
ProvisionedPackage + Register |
ℹ️ 关于 VCLibs
Microsoft.VCLibs.140.00 (v14.0.33519.0) 在系统中已预装,无需额外安装。但如果你的系统中缺少此包,也需要按相同方式暂存和注册。
关键经验总结
1. AppData 重定向是 AppContainer 错误的隐藏根因
当 AppData 通过注册表重定向到非默认路径时,Windows 的 AppX 部署系统可能无法在目标路径创建 Packages 文件夹,导致所有 Add-AppxPackage 操作失败并报 0x80070003。解决方案是手动创建这些文件夹。
2. Add-AppxProvisionedPackage 是绕过 AppContainer 限制的关键
当 Add-AppxPackage 因 AppContainer 失败时,Add-AppxProvisionedPackage 可以将包暂存到系统映像(Staged 状态),不依赖用户级 Packages 文件夹。之后再以管理员身份从 AppXManifest.xml 注册即可。
3. SYSTEM 账户不能注册 AppX 包
使用 PsExec -s 或计划任务以 SYSTEM 身份运行 Add-AppxPackage -Register 会报 0x80073CF9。必须以 管理员用户身份(如 NP 用户)运行注册命令。
4. 注册表残留必须彻底清理
Store 被删除后,AppxAllUserStore、SystemAppData、PolicyCache、Config 等多个注册表位置会残留旧版本条目。这些残留会导致新版本安装冲突,必须逐一清理。
5. D 盘迁移需要多层面配合
将 Store 安装目录迁移到 D 盘不仅仅是修改 StoragePolicy,还需要:创建 D 盘 WindowsApps 文件夹并复制 ACL 权限、迁移 TEMP/TMP 环境变量、确保 Store 缓存在 D 盘路径。缺少任何一步都可能导致下载失败。
本教程基于实际修复操作编写,系统环境为 Windows 10 (19045.6466)。操作涉及系统注册表和权限修改,请确保在执行前备份重要数据。