俞木發

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

4按提示在右側窗格的“模式”下將“1”改為“0”并保存數據庫,最后返回圖4所示的窗口,再次輸入并執行卸載命令,此時就可以將“Microsof t.XboxGameCallableUI”徹底地卸載掉了。