俞木發(fā)
筆者在卸載了《極限競速地平線4》后再試圖安裝時系統(tǒng)卻提示“Add-AppxPackage :部署失敗,原因是 HRESULT:0x80073CFB,提供的程序包已安裝,且禁止重新安裝該程序包”(圖1)。這是由于上次卸載不徹底,導(dǎo)致應(yīng)用殘留,從而讓W(xué)indows 10誤認(rèn)為該游戲已安裝所致。
這里使用命令行對“Packages”文件夾進(jìn)行了所有者和權(quán)限的更改,操作后請恢復(fù)文件夾的默認(rèn)設(shè)置,否則可能會導(dǎo)致應(yīng)用運(yùn)行錯誤。如果還對應(yīng)用的安裝目錄“C:\ProgramFiles\Windowsapps ” 或者“C:\windows\systemapps”執(zhí)行了類似的操作,那么也需要重新恢復(fù)權(quán)限設(shè)置,具體操作可以參考本刊2021年第15期的文章《用icacls命令解決Windows 10權(quán)限難題》中所介紹的方法。
解決方法:手動完全卸載殘留的應(yīng)用
由于應(yīng)用的安裝位置是在“C:\Program Files\Windowsapps”,默認(rèn)本機(jī)的管理員賬戶也沒有訪問權(quán)限,因此為了能夠?qū)⑵渲袣埩舻奈募h除掉,我們需要先到“https://docs.microsoft.com/en-us/sysinternals/downloads/psexec”下載PsExec.zip文件,下載后將其全部解壓到“D:\aa”備用。然后以管理員身份啟動命令提示符,輸入“d:\aa\PsExec.exe -s-i powershell”并回車(每條命令輸入后均需回車確認(rèn),下同)。這里使用PsExec.exe是因?yàn)樵撥浖梢杂肧YSTEM身份啟動PowerShell,以便獲得更高的權(quán)限來對文件進(jìn)行更改。
啟動Powershell后繼續(xù)輸入并執(zhí)行“takeown /f C:\ProgramData\Microsoft\Windows\ App Repository\Packages/a|icacls C: \ProgramData\Microsoft\Windows\ AppRepository\Packages /grantadministrators:F”命令,該命令的作用是獲得指定文件夾的所有權(quán)和訪問權(quán)(圖2)。
接著打開“C:\ProgramData\Microsoft\Windows\ AppRepository\Packages”文件夾,使用搜索功能或者手動查找,找到其中類似“Microsoft.SunriseBaseGame_1.341.398.2_x64_ _8wekyb3d 8bbwe”的文件夾(圖3)。
找到上述的文件夾后,復(fù)制其文件夾名稱備用,再返回Power Shell窗口輸入并執(zhí)行“remove-appxpackage ** Microsof t.SunriseBaseGame_1.341.398.2_x64__8wekyb3d8bbwe **”命令,即可徹底地卸載殘留的游戲。最后,重新安裝該游戲即可。
Windows 10默認(rèn)安裝了很多內(nèi)置應(yīng)用,筆者在制作系統(tǒng)封裝包的時候都會預(yù)先將不用的內(nèi)置應(yīng)用卸載掉。不過在使用PowerShell卸載“Microsoft.XboxGameCallableUI”時,系統(tǒng)卻提示0x80073CFA錯誤,無法卸載(圖4)。
從圖4中所顯示的內(nèi)容可以看到,無法卸載是由于此應(yīng)用是Windows的一部分,無法針對每個用戶卸載該應(yīng)用。實(shí)際上真正的原因是:從Windows 10 1909版開始,微軟對系統(tǒng)應(yīng)用包增加了“IsInbox標(biāo)志”,且將其值設(shè)置為“1”,從而導(dǎo)致某些系統(tǒng)應(yīng)用(如圖4中顯示的應(yīng)用)無法使用PowerShell正常卸載。
解決方法:更改IsInbox標(biāo)志
1到“http://www.sqlitebrowser.org/dl/”下載“DB Browser for SQLite”,建議下載壓縮格式的便攜版,然后解壓到“C: \Users\當(dāng)前用戶\Downloads”備用。
2啟動命令提示符后輸入并執(zhí)行“d:\ aa\PsE xec .exe -s -i?cmd.exe”(假設(shè)PsExec.exe仍以前文相同的步驟安裝在“D:\aa”中),接著在啟動的命令提示符窗口中輸入并執(zhí)行“C:\Users\當(dāng)前用戶\Downloads\SQ Lite Database Brow ser Portable\SQLiteDatabaseBrowserPor table.exe”命令。啟動程序后點(diǎn)擊“打開數(shù)據(jù)庫”,打開“%ProgramData%\Microsoft\Windows\App Repository\ State Repository -Machine.srd”文件(圖5)。
3在程序的主界面中切換到“瀏覽數(shù)據(jù)”,在下面的“表(T)”中選擇“Package”,拖動下方的滑塊,切換到“PackageFullName“列的顯示,并且在“Isinbox”下輸入“1”進(jìn)行篩選,可以看到其中“Microsoft.XboxGameCallableUI_1000.19041.1023.0_neutral_neutral_cw5n1h2txyewy”包的“IsInbox”值為“1”(圖6)。
4按提示在右側(cè)窗格的“模式”下將“1”改為“0”并保存數(shù)據(jù)庫,最后返回圖4所示的窗口,再次輸入并執(zhí)行卸載命令,此時就可以將“Microsof t.XboxGameCallableUI”徹底地卸載掉了。