管理 Firefox 更新

Firefox Enterprise Firefox Enterprise 最近更新: 1 週前
This is a machine-generated translation of the English article. It has not been reviewed by a human, and may contain errors. If you would like to revise this content, you can start here.

本文是撰寫給希望於企業環境,管理電腦當中的 Firefox 的 IT 管理員使用。

我們建議為所有 Firefox 部署保持啟用自動更新,以確保套用最新的安全性修補程式並可使用所有功能,但您的特定環境可能會阻止自動更新。

Firefox Rapid Release 和 Firefox Extended Support Release 皆可用於您的企業環境。如果您擔心頻繁的大型更新,我們建議查看 選擇 Firefox 更新通道 以了解更多關於 Firefox Extended Support Release 的資訊。

主要更新頻率 主要更新範圍 次要更新頻率 次要更新範圍
ESR 每年

查看日曆

交付過去 12 個月的新功能並修復錯誤。 每 2 週或必要時 重大穩定性或安全性錯誤修復
RR 每兩週

查看日曆

交付過去 2 週的新功能並修復錯誤。 必要時於主要版本之間發布 重大穩定性或安全性錯誤修復


停用 Firefox 更新

自動更新預設為啟用,但您可以使用 DisableAppUpdate 政策 將其停用。

啟用更新後,可以透過啟用 AppAutoUpdate 政策 來在未經使用者核准的情況下,以靜默方式安裝更新。

排解 Firefox 更新問題

如果工作站未收到 Firefox 更新,以下的 PowerShell 檢查可以幫助找出根本原因。

檢查本機群組原則 (GPO) 登錄機碼

執行以下指令:

Get-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Mozilla\Firefox" | 
Select-Object DisableAppUpdate, AppAutoUpdate

預期值:

登錄值 預期值
DisableAppUpdate 0
AppAutoUpdate 1

如果這些值未如預期設定,Firefox 更新可能已被本機或網域群組原則停用。

檢查已安裝的 Firefox 版本

執行以下 PowerShell 指令:

Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" |
Where-Object { $_.PSChildName -like "Mozilla Firefox*" } |
ForEach-Object {
    Get-ItemProperty $_.PsPath |
    Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
}

將安裝的版本與 Mozilla 網站上提供的最新 Firefox ESR 版本進行比較。

檢查排程工作

Firefox 依賴背景排程工作來下載和套用更新。

執行以下 PowerShell 指令:

Get-ScheduledTask | 
Where-Object { $_.TaskName -like "*Firefox Background Update*" } | 
ForEach-Object { Get-ScheduledTaskInfo $_ }

→ 請確保:

  • 工作存在
  • 工作已啟用
  • 工作成功執行且無錯誤

檢查 Mozilla 維護服務

在 Windows 上,Firefox 更新可能需要安裝並執行 Mozilla 維護服務。此服務允許 Firefox 在不需要管理員權限的情況下套用更新。

檢查服務是否存在及其狀態

執行以下 PowerShell 指令:

Get-Service -Name MozillaMaintenance -ErrorAction SilentlyContinue |
Select-Object Name, DisplayName, Status, StartType

→ 預期行為:

  • 服務存在
  • 狀態為 Running(或 Stopped,但能夠啟動)
  • StartType 設定為 AutomaticManual
  • 如果服務遺失,Firefox 可能無法自動套用更新。

手動啟動服務 (若有需要)

如果服務存在但未執行,請嘗試啟動它。執行以下 PowerShell 指令:

Start-Service -Name MozillaMaintenance

再次檢查服務是否能無錯誤地啟動。

重新安裝 Mozilla 維護服務

如果服務遺失或損毀,可以使用 Firefox 安裝程式重新安裝:

  1. 下載與您的部署相符的 Firefox 安裝程式(ESR 或標準版)。
  2. 以管理員身分執行安裝程式。
  3. 確保已選取「安裝 Mozilla 維護服務」。

安裝後,重新檢查服務狀態。

更新期間 UAC 提示要求管理員憑證

在某些工作站上,即使 Mozilla 維護服務已安裝且運作正常,更新仍會觸發一個標題為「Firefox Updater Software」的 UAC 提示,要求管理員憑證。標準使用者無法完成更新,且每次啟動 Firefox 時都會重新出現此提示。

原因

在使用維護服務之前,Firefox 更新程式會檢查工作站的 UAC 設定(更新程式原始碼中的 IsUnpromptedElevation 測試)。如果 UAC 設定為靜默提升權限,Firefox 會假設提升權限將在沒有任何提示的情況下發生——就像對管理員一樣——並跳過維護服務。但如果登入的使用者實際上不是管理員,提升權限並非靜默,Windows 會改為顯示 UAC 憑證提示。

這種情況只在同時滿足以下所有三個條件時發生:

  1. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorAdmin 設定為 0(安全性選項「使用者帳戶控制:管理員核准模式中管理員的提高權限提示行為」=「不提示直接提高權限」;Windows 預設值為 5
  2. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\PromptOnSecureDesktop 設定為 0(安全性選項「使用者帳戶控制:提示提高權限時切換到安全桌面」=「已停用」;Windows 預設值為 1
  3. 登入的使用者具有UAC 過濾權杖:屬於特權群組(Administrators、Backup Operators、Power Users 等)的成員,包括標記為「僅拒絕」的群組,或持有透過群組原則授予的敏感權限(例如 SeBackupPrivilegeSeDebugPrivilege)。請注意,基於權限的過濾在 whoami /groups 中不可見。

診斷

檢查更新程式日誌中是否有以下特徵:

Get-Content "C:\ProgramData\Mozilla-1de4eec8-1241-4177-a864-e594e8d1fb38\updates\*\updates\0\update.log"

...
After checking IsUnpromptedElevation, useService=false
Elevating via a UAC prompt
Writing status to file: failed: 9
...

IsUnpromptedElevation 檢查後的 useService=false 行確認了此原因(錯誤 9 表示使用者取消了 UAC 提示)。注意:在第一次失敗後,後續的日誌會從第一行就顯示 useService=false,而沒有 After checking... 的行(殘留狀態,請參閱解決方案)。

然後檢查 UAC 值和待處理的更新狀態:

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v PromptOnSecureDesktop
Get-Content "C:\ProgramData\Mozilla-1de4eec8-1241-4177-a864-e594e8d1fb38\updates\*\updates\0\update.status"

可能的 update.status 值:

意義
pending-service 已下載更新,將使用維護服務(正常)
pending Firefox 已放棄在此次更新中使用維護服務(失敗後的殘留狀態)
applied-service 已透過維護服務成功套用更新

解決方案

  1. 關閉 Firefox。
  2. 在提升權限的 PowerShell 中執行以下指令:
    • 還原管理員的預設 UAC 提高權限提示行為
      reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 5 /f
    • 重新啟用提高權限提示的安全桌面
      reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v PromptOnSecureDesktop /t REG_DWORD /d 1 /f
    • 清除殘留的更新狀態(否則提示會最後再出現一次)
      Remove-Item "C:\ProgramData\Mozilla-1de4eec8-1241-4177-a864-e594e8d1fb38\updates\*\*" -Recurse -Force
  3. 啟動 Firefox,前往「說明」>「關於 Firefox」,並等待「重新啟動以更新 Firefox」。
  4. 重新啟動 Firefox:更新必須在沒有任何 UAC 提示的情況下套用。

→ 備註:

  • 還原兩個 UAC 值中的任何一個都足以打破錯誤的條件;同時還原兩者可將工作站恢復到 Windows 預設值。
  • 如果這些 UAC 值是由網域群組原則強制執行的,它們將在下一次原則重新整理時被重設(使用 gpupdate /force 檢查)——此時必須在 GPO 層級套用修復。
  • 或者,將使用者從特權群組中移除(然後登出再登入)也可以解決此問題。

驗證

更新後,新的 update.log 包含 After checking IsUnpromptedElevation, useService=true,且 update.status 顯示 applied-service

檢查 BITS 傳輸(背景智慧型傳輸服務)

Firefox 使用 BITS 在背景下載更新。

執行以下 PowerShell 指令:

Get-BitsTransfer | 
Where-Object { $_.DisplayName -match 'mozilla' -or $_.RemoteName -match 'mozilla' } | 
ForEach-Object {
    $job = $_
    foreach ($file in $job.FileList) {
        [PSCustomObject]@{
            DisplayName        = $job.DisplayName
            JobState           = $job.JobState
            BytesTransferredMB = [math]::Round($file.BytesTransferred / 1MB, 2)
            BytesRemainingMB   = [math]::Round(($file.BytesTotal - $file.BytesTransferred) / 1MB, 2)
            ProgressPercent    = if ($file.BytesTotal -gt 0) { 
                                     [math]::Round(($file.BytesTransferred / $file.BytesTotal * 100), 2) 
                                 } else { 0 }
            RemoteURL          = $file.RemoteName
            LocalPath          = $file.LocalName
        }
    }
}

→ 檢查項目

  • JobState 顯示目前的傳輸狀態(傳輸中、已暫停、已完成或錯誤)。
  • ProgressPercent 指示下載進度。
  • RemoteURL 顯示 Firefox 用於擷取更新的 URL。

→ 若下載被封鎖

如果進度沒有推進或工作失敗,請確認 RemoteURL 中顯示的 URL 未被您的網路、防火牆或代理伺服器封鎖。

要確認,請將 URL 複製並貼到瀏覽器中,檢查下載是否能成功開始。

列出 C:\ProgramData 中與 Firefox 相關的檔案

Firefox 更新檔案會下載並儲存在以下位置。

執行以下 PowerShell 指令:

Get-ChildItem -Path "C:\ProgramData\Mozilla-*" -Recurse | 
Select-Object @{ Name="Path"; Expression={$_.FullName} }, 
              @{ Name="Type"; Expression={ if ($_.PSIsContainer) { "Directory" } else { "File" } } }, 
              @{ Name="Size"; Expression={$_.Length} },
              @{ Name="LastModified"; Expression={$_.LastWriteTime} 
}

這有助於驗證更新檔案是否已下載,並識別不完整或停滯的檔案。

這些好人幫助我們撰寫了這篇文章:

Illustration of hands

成為志工

在此回答問題並幫助我們改善知識庫內容,與其他人一起切磋琢磨專業能力。

了解更多