# 軟體更新失敗時，是卡在下載、安裝還是版本檢查

軟體頁顯示有更新，點下去卻一直沒結束。先看看它停在下載、等待系統管理員確認、安裝，還是安裝後的版本檢查。這幾個階段用的是不同入口。反覆點選更新未必能讓正在等你確認的安裝程式繼續。

## 下載慢和安裝失敗分開看

Mole 更新列會說明目前階段。下載能讀取到總大小時顯示百分比，沒有總大小時會顯示已下載的量。數字還在變化就說明有進展。下載階段可以取消。一旦進入安裝階段（包括跳出系統管理員確認），這次更新就不能再取消，也就不會把安裝程式結束在裝到一半的狀態。

| 停在什麼地方 | 先看哪裡 |
| --- | --- |
| 下載一直沒有進展，或伺服器傳回錯誤 | 下載位址、目前網路和廠商服務，記錄完整報錯 |
| 正在要求系統管理員權限 | 工作列和 Windows 的系統管理員確認視窗 |
| 安裝中，另一個視窗還開著 | 安裝程式是否在等結束 App、確認或重新啟動 |
| 執行完，仍顯示同一個版本 | App 的關於頁、安裝範圍和是否需要重新開啟 |

廠商伺服器拒絕下載時，安裝程式可能一次都沒執行，不能當成安裝程式損壞，也不需要為此先卸掉原來還能用的軟體。

## 錯誤代碼放回它自己的安裝程式裡看

不同的失敗要做不同的事。Windows Installer 的幾個結果代碼就是例子。

| MSI 代碼 | 含義 | 下一步 |
| --- | --- | --- |
| 1603 | 安裝失敗的通用結果 | 看同一次安裝的記錄（`%TEMP%` 裡的 `MSI*.log`，或用 `msiexec /l*v` 重跑一次），代碼本身沒有指出具體原因 |
| 1618 | 另一項安裝正在執行 | 先讓那項安裝結束，不要同時再啟動一份 |
| 3010 | 安裝成功，需要重新啟動才能完成 | 儲存工作後按提示重新啟動，再核對版本 |

這些含義來自[微軟的 Windows Installer 代碼表](https://learn.microsoft.com/en-us/windows/win32/msi/error-codes)，只適用於 MSI 的結果，不能拿同樣的數字去解釋每家廠商的 EXE 安裝程式。`3010` 尤其不代表下載失敗、需要重裝。

## 找記錄不需要再裝一次

在 PowerShell 裡執行下面這條查詢，可以看到 WinGet 的版本、環境和記錄目錄。它不會開始更新任何軟體。

```powershell
winget --info
```

按輸出的位置找到出錯那段時間的記錄，對上軟體名稱、套件 ID 和時間，再分清錯誤來自下載要求、安裝程式結束，還是後面的版本檢查。記錄裡可能有本機使用者名稱和檔案路徑。寄給支援之前先刪掉不想分享的部分，不要把整包記錄貼到公開的地方。

點選更新的時間、原來的軟體版本、完整的代碼，以及有沒有出現授權或重新啟動提示，這幾項放在一起記。不然昨天另一個軟體的安裝失敗，很容易看成今天這次的原因。[WinGet 排查說明](https://learn.microsoft.com/en-us/windows/package-manager/winget/troubleshooting)講了怎麼查記錄，不用為了拿記錄先強制重裝。

<figure class="blog-diagram">
  <picture>
    <source media="(max-width: 900px)" srcset="/img/blog/windows-windows-app-update-failures-zh-mobile.webp" type="image/webp" width="768" height="1500">
    <img src="/img/blog/windows-windows-app-update-failures-zh.webp" width="1360" height="454" loading="lazy" alt="更新卡在哪一步，處理就看哪一步">
  </picture>
  <figcaption>按階段定位更新問題。只有需要權限時才要求授權。安裝完成以後再核對實際執行的版本。</figcaption>
</figure>

## 有些更新需要先移除舊版

Java 8 這類安裝程式可能要求先解除安裝舊版。裝給全機的舊版又需要系統管理員權限，一般權限下執行不一定能完成。Mole 會處理它支援的更新情形，需要系統管理員確認時再要求。不能把所有失敗都歸為同一種權限問題。

安裝程式各有自己的結束代碼和行為。微軟的 [winget 排查說明](https://learn.microsoft.com/en-us/windows/package-manager/winget/troubleshooting)介紹了記錄與錯誤檢查。回報時保留錯誤碼和具體階段，比只說更新失敗更容易查清楚。

## 安裝成功後，還要確認用上了新版

有些 App 會保留使用者層級和全機層級兩份安裝。軟體顯示的版本和套件來源記錄也可能使用不同編號。先開啟這份 App 的關於頁，再核對安裝程式是否完成。要求重新啟動時把步驟做完，不要為了清空更新清單反覆覆蓋安裝。

Mole 對版本仍然沒變的結果會保留複查路徑。能自行更新的軟體按它自己的管道處理，具體入口見[軟體更新指南](/tw/windows/blog/update-windows-apps)。瀏覽器可以在仍然開啟時更新的，新版通常要等下一次重新啟動瀏覽器才使用。

## 回報時帶上目前版本和報錯

記錄 Windows、Mole 和出問題軟體的版本，說明下載、系統管理員確認或安裝走到了哪一步，附上錯誤和截圖，透過 [Windows 說明](/tw/windows/help)裡的支援入口回報。記錄裡不想分享的內容先去掉。

Mole 自己的更新、其他 App 更新和 Windows Update 不是同一套佇列。系統更新出錯時繼續查 Windows 的記錄，不要把軟體頁的一條失敗當成整個系統都需要重設。更新入口本身怎麼分，見[Windows 軟體更新的幾個入口](/tw/windows/blog/update-windows-apps)。更新檔案佔的空間和回復代價，見[刪除 Windows 更新檔案](/tw/windows/blog/delete-windows-update-files)。


Canonical: https://mole.fit/tw/windows/blog/windows-app-update-failures
