異步 WUA 作業的指導方針
本主題會識別您在執行異步 Windows Update 代理程式 (WUA) 作業時所遵循的指導方針。
- 異步 WUA 作業不保證任何特定的完成速度。 異步 WUA 作業的完成時間可能會因電腦硬體、作業系統版本和網路設定而有所不同。 如同具有網路相依性且不包含逾時參數或記載逾時持續時間的其他 Windows API 一樣,如果您需要保證的回應時間,建議您考慮實作自己的逾時機制。 例如,您可以建立背景工作線程來呼叫異步 WUA 方法,並在異步 WUA 作業完成時設定事件或其他同步處理物件;然後,主線程可以使用 WaitForSingleObject 或 WaitForMultipleObjects 函式,讓您指定逾時值。
- 當您結束搜尋、下載、安裝或卸載更新時,您可以從任何線程使用 IUpdateSearcher::EndSearch、IUpdateDowloader::EndDownload、IUpdateInstaller::EndInstall 和 IUpdateInstaller::EndUninstall。
- 當您使用 IUpdateSearcher::BeginSearch、IUpdateDownloader::BeginDownloader::BeginDownloader::BeginDownload、IUpdateInstaller::BeginInstall 和 IUpdateInstaller::BeginUninstall 開始搜尋、安裝或卸載更新時,請確定當您發行 WUA API 物件的參考時,會保有足夠的訪問許可權。
- 請確定在異步操作中使用的任何回呼物件在您終結之前,都未參考它們。 等候回呼對象的參考計數傳回初始值,再終結它。
- 從對應 Begin 方法傳回之作業對象的參考,應該由與回呼物件不同的物件控制。 使用與回呼物件不同的物件,以避免循環參考。
- 如果您嘗試使用回呼物件來控制作業對象的參考,您必須呼叫 IDownloadJob::CleanUp、IInstallationJob::CleanUp 或回呼函式外部的 ISearchJob::CleanUp 方法,以中斷作業物件與回呼對象的連線。 您必須先執行這項操作,才能釋放 Begin 方法所傳回之作業對象的參考。
- 請確定異步 WUA 作業已完成。 Windows 腳本主機可以在任何函式以外的所有命令完成時終止腳本,即使 WUA API 仍然具有回呼對象的參考也一樣。
- 使用其中 一個 CleanUp 方法,或讓回調函式在完成時設定共用全域變數。
- 永不在其回呼函式中呼叫工作物件的 IDownloadJob::CleanUp、IInstallationJob::CleanUp 或 ISearchJob::CleanUp。
- 為了確保在 Windows Internet Explorer 上執行的腳本中正確清除順序,請在處理 window.onbeforeunload 時,在所有作業物件上呼叫 CleanUp 方法。
- 請勿使用使用者定義的數據類型 (UDT) 進行異步 WUA 作業。 IUpdateSearcher::BeginSearch、IUpdateDownloader::BeginDownloader::BeginDownload、IUpdateInstaller::BeginInstall 或 IUpdateInstaller::BeginUninstall 不支援此類型。