ロードブロッキングが発生したとき、私は新しいWindows 10インストールからすべてのユニバーサルアプリをアンインストールしている最中でした。
私がこれを行うのは初めてではなく、常にうまくいきます。しかし、今回は、PowerShellで書くたびに
_Get-AppxPackage -allusers | Remove-AppxPackage
_
またはより具体的なもの
_Get-AppxPackage -allusers *windowscalculator* | Remove-AppxPackage
_
次のメッセージが表示されます:
Remove-AppxPackage:HRESULTで展開が失敗しました:0x80073CFA、削除に失敗しました。ソフトウェアベンダーにお問い合わせください。 (HRESULTからの例外:0x80073CFA)エラー0x80070032:パッケージMicrosoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbweのAppX Deployment Remove操作:C:\ Program Files\WindowsApps\Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbweが失敗しました。
このアプリはWindowsの一部であり、ユーザーごとにアンインストールすることはできません。管理者は、Windowsの機能の有効化または無効化を使用して、コンピューターからアプリを削除しようと試みることができます。ただし、約
注:詳細については、イベントログで[ActivityId] 75c5fc31-fb20-0001-77fd-c57520fbd101を探すか、コマンドラインGet-AppxLog -ActivityID 75c5fc31-fb20-0001-77fd-c57520fbd101を使用してください
行:1文字:49
+ Get-appxpackage -allusers *windowscalculator* | Remove-AppxPackage + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (Microsoft.Windo...__8wekyb3d8bbwe:String) [Remove-AppxPackage], IOException + FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.RemoveAppxPackageCommand
電卓や画像ビューアのように完全にアンインストールできることがわかっているものも含めて、アンインストールしようとするすべてのアプリに対してこのメッセージが表示されます。
Powershellは昇格して実行されており、他のすべては機能し、正常に見えます。
Windowsの再インストール以外にできることはありますか?
Windows 10 Anniversary Updateから、MicrosoftはSQLiteデータベースC:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd
に新しいエントリIsInbox
をインボックスアプリ用に追加しました。また、IsInbox
のフラグが付いたアプリappを削除しようとすると、0x80073CFA
で失敗します。
しかし、醜い回避策があります。それは 2017年4月に発見されました でした。
ツール ProcessHacker および DB Browser for SQLite をダウンロードしてインストールする必要があります。
C:\Windows\System32\svchost.exe
を選択し、右クリックしてMisc
-> Run as this user
を選択しますここでC:\Program Files\DB Browser for SQLite\DB Browser for SQLite.exe
を選択して開始します。 SQLiteブラウザでOpen database
をクリックします
そして、ファイルC:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd
を開きます(開くダイアログのファイルタイプをすべてのファイルに変更して表示します)。
次に、Browse Data
タブをクリックし、テーブルをPackage
に変更します。
次に、削除するアプリを選択し、列の1をIsInbox
を0
に変更して、変更を保存します。
削除するすべてのアプリについてこれを繰り返します。これで、Powersehllコマンドが機能するはずです。
しかし、著者は書いている、受信ボックスアプリが削除された場合、Microsoftは新しいWindowsビルドへのアップグレードをブロックする。これを覚えておいてください。
投稿 システムアプリのクリーンな削除(バイパスエラー0x80073CFA) には、次のPowerShellスクリプトが含まれています。
function Enable-Privilege {
param($Privilege)
$Definition = @'
using System;
using System.Runtime.InteropServices;
public class AdjPriv {
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,
ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr rele);
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
[DllImport("advapi32.dll", SetLastError = true)]
internal static extern bool LookupPrivilegeValue(string Host, string name,
ref long pluid);
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct TokPriv1Luid {
public int Count;
public long Luid;
public int Attr;
}
internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
internal const int TOKEN_QUERY = 0x00000008;
internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
public static bool EnablePrivilege(long processHandle, string privilege) {
bool retVal;
TokPriv1Luid tp;
IntPtr hproc = new IntPtr(processHandle);
IntPtr htok = IntPtr.Zero;
retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
ref htok);
tp.Count = 1;
tp.Luid = 0;
tp.Attr = SE_PRIVILEGE_ENABLED;
retVal = LookupPrivilegeValue(null, privilege, ref tp.Luid);
retVal = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero,
IntPtr.Zero);
return retVal;
}
}
'@
$ProcessHandle = (Get-Process -id $pid).Handle
$type = Add-Type $definition -PassThru
$type[0]::EnablePrivilege($processHandle, $Privilege)
}
function Take-Over($path) {
$owner = [Security.Principal.NTAccount]'Administrators'
$key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey($path, 'ReadWriteSubTree', 'TakeOwnership')
$acl = $key.GetAccessControl()
$acl.SetOwner($owner)
$key.SetAccessControl($acl)
$acl = $key.getaccesscontrol()
$rule = New-Object System.Security.AccessControl.RegistryAccessRule "Administrators", "FullControl", "ContainerInherit", "None", "Allow"
$acl.SetAccessRule($rule)
$key.SetAccessControl($acl)
}
do {} until (Enable-Privilege SeTakeOwnershipPrivilege)
function Remove-Package($name) {
$key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\$name"
Take-Over $key
Remove-Item -Path HKLM:"$key\Owners" -Force -Recurse
& C:\Windows\System32\PkgMgr.exe /up:$name /norestart /quiet
}
#Remove Feedback
$packageBase = "Microsoft-WindowsFeedback"
$packageNames = (dir ("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\" + $packageBase + "*")).name
forEach ($package in $packageNames)
{
Remove-Package $package.substring($package.indexOf($packageBase))
}
このスクリプトの使用について、著者は次のように述べています。
$ packageBaseを別のパッケージ名に変更できます。
私はこのスクリプトを自分で試したことはありません。
Windows Anniversaryの更新により、Cortanaなどの特定の機能をオフにしたり、公式な方法でアプリを削除したりできないようにするためのかなりの数の変更が行われました。 xboxアプリのような一部のアプリは、Microsoftがシステムにとって重要なアプリであると判断したため、公式な方法でアプリを削除できませんでした。
スタートメニューに移動した場合は、右クリックして[アンインストール]をクリックできます。逆に、スタートボタンを右に移動して、設定に移動し、アプリと機能に移動して、そこからアンインストールできます。
これらのアプリの削除に固執している場合。それらはC:\windows\SystemApps
それで、それが保持されているフォルダーを見つけて、そのフォルダーを削除するか、安全なオプションとして、名前を変更して下線などの文字を追加します_
から名前の末尾まで。
追加するだけで、フォルダーを削除したり、systemappsフォルダー内の名前を変更したりしても、技術的にはアンインストールせず、強制的に削除します。フォルダーを削除すると、レジストリキーやその他のファイルなど、他のファイルがインストールされたままになる可能性があります。 systemappsフォルダーを使用しますが、フォルダーに名前を変更した場合は実行されません。
以下のコメントでRyaknaが述べたように、これらのオプションの2つを使用すると、後で問題が発生する可能性がありますが、私の経験から、更新などの問題はまだ発生していません。ただし、正式な方法でアンインストールすることをお勧めします。詳しくは、Powershellを使用するか、プログラムと機能のオプションまたはメニューオプションを使用してください。 SystemApps
フォルダーの名前を変更したり削除したりしないでください。これを行うと、systemappsフォルダー内のフォルダーの名前を変更したり削除したりする場合よりも、問題が発生する可能性が高くなります。