できています。少なくとも、最後の2つは赤字エラーなしでプロンプトに戻っているので、次の再登録は通った可能性が高いです。
MicrosoftWindows.Client.WebExperienceMicrosoft.UI.Xaml.2.8
次は状態確認です。管理者 PowerShell でこれを実行してください。
Get-AppxPackage -AllUsers |
Where-Object { $_.Status -ne "Ok" } |
Select Name, PackageFullName, Status |
Sort-Object NameCode language: JavaScript (javascript)
ここで Microsoft.UI.Xaml.2.8 の Modified, NeedsRemediation が消えているかが最重要です。
まだ Store や Windows Security などが DependencyIssue のままなら、続けて壊れていたアプリ本体を再登録します。
$apps = @(
"Microsoft.WindowsStore",
"Microsoft.SecHealthUI",
"Microsoft.WindowsTerminal",
"Microsoft.XboxGamingOverlay",
"Microsoft.WindowsCalculator",
"Microsoft.WindowsNotepad",
"Microsoft.Paint"
)
foreach ($app in $apps) {
Get-AppxPackage -AllUsers $app | ForEach-Object {
$manifest = Join-Path $_.InstallLocation "AppxManifest.xml"
if (Test-Path $manifest) {
Add-AppxPackage -DisableDevelopmentMode -Register $manifest
}
}
}Code language: PHP (php)
その後、再起動して、Windows セキュリティ、Microsoft Store、Terminal の順で起動確認してください。
a
これは、修復コマンド自体は進んでいますが、対象パッケージを使用中のプロセスが残っているため失敗しています。
画面のエラーは 0x80073D02 で、意味は「変更されるリソースが現在使用中」です。今回、使用中として出ているのは主にこれです。
MicrosoftWindows.Client.WebExperiencewindows.immersivecontrolpanelAppleInc.iTunes
windows.immersivecontrolpanel は「設定」アプリです。背面で「設定」と Edge、タスクマネージャーが開いているので、まず全部閉じてください。特に「設定」は閉じる必要があります。
その後、管理者 PowerShell で次を実行してください。
Get-Process msedge,msedgewebview2,SystemSettings,ApplicationFrameHost,Widgets,WidgetService,WinStore.App,SearchHost,StartMenuExperienceHost,iTunes -ErrorAction SilentlyContinue |
Stop-Process -Force
続けて、Web Experience Pack だけを先に再登録します。
Get-AppxPackage -AllUsers MicrosoftWindows.Client.WebExperience |
ForEach-Object {
$manifest = Join-Path $_.InstallLocation "AppxManifest.xml"
if (Test-Path $manifest) {
Add-AppxPackage -DisableDevelopmentMode -Register $manifest
}
}Code language: PHP (php)
次に、問題の中心だった Microsoft.UI.Xaml.2.8 を再登録します。
Get-AppxPackage -AllUsers Microsoft.UI.Xaml.2.8 |
ForEach-Object {
$manifest = Join-Path $_.InstallLocation "AppxManifest.xml"
if (Test-Path $manifest) {
Add-AppxPackage -DisableDevelopmentMode -Register $manifest
}
}Code language: PHP (php)
それでも 0x80073D02 が出る場合は、通常起動中の修復では掴まれ続けています。その場合は、**セーフモードではなく「クリーンブート」**がよいです。セーフモードだとAppx関連サービスが十分に動かないことがあるためです。
クリーンブート手順は最小限で言うと、
msconfig →「サービス」→「Microsoft のサービスをすべて隠す」→「すべて無効」
タスクマネージャー →「スタートアップ アプリ」→不要なものを無効
再起動後、管理者PowerShellだけ開いて再登録
です。
今のエラーは「さらに壊れた」という意味ではなく、修復対象を別アプリが使用中なので書き換えられないという段階です。まず開いている「設定」「Edge」「タスクマネージャー」を閉じて、上の Stop-Process からやり直すのが次の手順です。
1. a
修復方針は、**「使われているものを止めてから、壊れている依存パッケージだけを再登録する」**です。今のように全Appxを一括再登録すると、使用中のものや古いバージョンも巻き込むため、0x80073D02 や 0x80073D06 が大量に出ます。0x80073D02 は「変更対象が使用中」、0x80073D06 は「より新しいバージョンが既に入っている」という意味です。Microsoftのトラブルシューティングでも、Storeアプリの起動失敗・登録不整合・依存パッケージ破損は PowerShell やアクセス許可確認で切り分ける対象になっています。
まず再起動してください。再起動後、Store、設定、Edge、ウィジェットなどを開かずに、管理者PowerShellだけを開きます。
次に、使用中になりやすいプロセスを止めます。
Get-Process Widgets,WidgetService,msedgewebview2,WinStore.App,GameBar,GameBarFTServer,SearchHost,StartMenuExperienceHost -ErrorAction SilentlyContinue |
Stop-Process -Force
そのうえで、壊れている中心である Microsoft.UI.Xaml.2.8 を優先して再登録します。
Get-AppxPackage -AllUsers Microsoft.UI.Xaml.2.8 |
ForEach-Object {
$manifest = Join-Path $_.InstallLocation "AppxManifest.xml"
if (Test-Path $manifest) {
Add-AppxPackage -DisableDevelopmentMode -Register $manifest
}
}Code language: PHP (php)
続けて、Store系の依存パッケージを再登録します。
$targets = @(
"Microsoft.VCLibs*",
"Microsoft.Services.Store*",
"Microsoft.StorePurchaseApp",
"Microsoft.WindowsStore"
)
foreach ($target in $targets) {
Get-AppxPackage -AllUsers $target | ForEach-Object {
$manifest = Join-Path $_.InstallLocation "AppxManifest.xml"
if (Test-Path $manifest) {
Add-AppxPackage -DisableDevelopmentMode -Register $manifest
}
}
}Code language: PHP (php)
ここで 0x80073D06 が出るものは、古い版を再登録しようとして弾かれているだけの場合があります。まず無視してよいです。一方、0x80073D02 がまだ出る場合は、何かが掴んでいるので再起動直後に再実行するのが安全です。
次に、壊れていたアプリ本体を再登録します。
$apps = @(
"Microsoft.SecHealthUI",
"Microsoft.WindowsTerminal",
"Microsoft.XboxGamingOverlay",
"Microsoft.WindowsCalculator",
"Microsoft.WindowsNotepad",
"Microsoft.Paint"
)
foreach ($app in $apps) {
Get-AppxPackage -AllUsers $app | ForEach-Object {
$manifest = Join-Path $_.InstallLocation "AppxManifest.xml"
if (Test-Path $manifest) {
Add-AppxPackage -DisableDevelopmentMode -Register $manifest
}
}
}Code language: PHP (php)
完了後、再起動してから確認します。
Get-AppxPackage -AllUsers |
Where-Object { $_.Status -ne "Ok" } |
Select Name, PackageFullName, Status |
Sort-Object NameCode language: JavaScript (javascript)
まだ Microsoft.UI.Xaml.2.8 が Modified, NeedsRemediation のままなら、手元のパッケージ再登録だけでは修復できていません。その場合は、Storeの再インストール処理をかけます。Microsoft Storeの登録確認には Get-AppxPackage *Microsoft.WindowsStore* が案内されています。
wsreset.exe -iCode language: CSS (css)
その後、再起動してもう一度 Status を確認します。
それでも直らない場合は、現在のWindows 11 23H2に対して 同じバージョンのISOで上書き修復インストール が次の段階です。これはアプリ、個人データ、設定を保持したままWindowsのシステム部分と受信トレイアプリ基盤を入れ直す方法です。今の状態では、24H2へのアップグレードではなく、まず23H2を正常化するのが安全です。
Get-AppxPackage -AllUsers Microsoft.VCLibs* | Select Name, PackageFullName, Status
Get-AppxPackage -AllUsers Microsoft.UI.Xaml* | Select Name, PackageFullName, Status
Get-AppxPackage -AllUsers Microsoft.NET.Native* | Select Name, PackageFullName, Status
Get-AppxPackage -AllUsers Microsoft.Services.Store* | Select Name, PackageFullName, Status
Get-AppxPackage -AllUsers Microsoft.StorePurchaseApp | Select Name, PackageFullName, Status
Get-AppxPackage -AllUsers Microsoft.WindowsStore | ForEach-Object {
Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppxManifest.xml"
}Code language: JavaScript (javascript)
Get-AppxPackage -AllUsers Microsoft.SecHealthUI | Select Name, PackageFullName, InstallLocation, Status
Get-AppxPackage -AllUsers Microsoft.WindowsTerminal | Select Name, PackageFullName, InstallLocation, Status
Get-AppxPackage -AllUsers Microsoft.XboxGamingOverlay | Select Name, PackageFullName, InstallLocation, Status
2. 3
Get-AppxPackage -AllUsers |
Where-Object { $_.Status -ne "Ok" } |
Select Name, PackageFullName, Status |
Sort-Object NameCode language: JavaScript (javascript)
$targets = @(
"Microsoft.VCLibs*",
"Microsoft.UI.Xaml*",
"Microsoft.NET.Native*",
"Microsoft.Services.Store*",
"Microsoft.StorePurchaseApp",
"Microsoft.WindowsStore",
"Microsoft.SecHealthUI",
"Microsoft.WindowsTerminal",
"Microsoft.XboxGamingOverlay"
)
foreach ($target in $targets) {
Get-AppxPackage -AllUsers $target | ForEach-Object {
if (Test-Path "$($_.InstallLocation)\AppxManifest.xml") {
Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppxManifest.xml"
}
}
}Code language: PHP (php)