Richtlinien für asynchrone WUA-Vorgänge
In diesem Thema werden Richtlinien für die folgenden Vorgänge beschrieben, wenn Sie asynchrone WUA-Vorgänge (Windows Update Agent) ausführen.
- Die asynchronen WUA-Vorgänge garantieren keine bestimmte Abschlussgeschwindigkeit. Die Abschlusszeit für einen asynchronen WUA-Vorgang kann je nach Computerhardware, Betriebssystemversion und Netzwerkkonfiguration stark variieren. Wie bei anderen Windows-APIs, die über Netzwerkabhängigkeiten verfügen und keinen Time out-Parameter oder eine dokumentierte Time out-Dauer enthalten, empfiehlt es sich, eigene Time out-Mechanismen zu implementieren, wenn Sie garantierte Antwortzeiten benötigen. Beispielsweise können Sie einen Arbeitsthread erstellen, der eine asynchrone WUA-Methode aufruft und ein Ereignis oder ein anderes Synchronisierungsobjekt festlegt, wenn der asynchrone WUA-Vorgang abgeschlossen ist. Der Hauptthread kann dann die Funktion WaitForSingleObject oder WaitForMultipleObjects verwenden, mit der Sie einen Time out-Wert angeben können.
- Wenn Sie eine Suche, einen Download, eine Installation oder deinstallation von Updates beenden, können Sie IUpdateSearcher::EndSearch, IUpdateDowloader::EndDownload, IUpdateInstaller::EndInstaller und IUpdateInstaller::EndUninstall aus einem beliebigen Thread verwenden.
- Wenn Sie mithilfe von IUpdateSearcher::BeginSearch, IUpdateDownloader::BeginDownload, IUpdateInstaller::BeginInstaller::BeginInstallerund IUpdateInstaller::BeginInstaller::BeginUninstalleine Suche, einen Download, eine Installation oder Deinstallation von Updates starten, stellen Sie sicher, dass Sie ausreichende Zugriffsberechtigungen beibehalten, wenn Sie Verweise auf WUA-API-Objekte freigeben.
- Stellen Sie sicher, dass alle Rückrufobjekte, die im asynchronen Vorgang verwendet werden, nicht erkannt werden, bevor Sie sie zerstören. Warten Sie, bis der Verweiszähler eines Rückrufobjekts zum Anfangswert zurückkehrt, bevor Sie ihn zerstören.
- Der Verweis auf das Auftragsobjekt, das von der entsprechenden Begin-Methode zurückgegeben wird, sollte von einem -Objekt gesteuert werden, das sich von den Rückrufobjekten unterscheidet. Verwenden Sie ein Objekt, das sich von den Rückrufobjekten unterscheidet, um Zirkelverweise zu vermeiden.
- Wenn Sie versuchen, den Verweis auf das Auftragsobjekt mithilfe eines Rückrufobjekts zu steuern, müssen Sie die Methode IDownloadJob::CleanUp, IInstallationJob::CleanUpoder ISearchJob::CleanUp außerhalb der Rückruffunktion aufrufen, um das Auftragsobjekt vom Rückrufobjekt zu trennen. Sie müssen dies tun, bevor Sie den Verweis auf das Auftragsobjekt freigeben, das von der Begin-Methode zurückgegeben wird.
- Stellen Sie sicher, dass asynchrone WUA-Vorgänge abgeschlossen sind. Windows Der Skripthost kann ein Skript beenden, wenn alle Befehle außerhalb einer Funktion abgeschlossen sind, auch wenn die WUA-API weiterhin Über Verweise auf das Rückrufobjekt verfügt.
- Verwenden Sie eine der CleanUp-Methoden, oder lassen Sie die Rückruffunktion nach Abschluss eine freigegebene globale Variable festlegen.
- Rufen Sie niemals IDownloadJob::CleanUp, IInstallationJob::CleanUpoder ISearchJob::CleanUp für ein Auftragsobjekt in seiner Rückruffunktion auf.
- Um die richtige Bereinigungssequenz in einem Skript sicherzustellen, das auf Windows Internet Explorer ausgeführt wird, rufen Sie die CleanUp-Methode für alle Auftragsobjekte auf, wenn Sie window.onbeforeunload verarbeiten.
- Verwenden Sie keine benutzerdefinierten Datentypen (USER-Defined Data Types, UDT) für asynchrone WUA-Vorgänge. Der Typ wird von IUpdateSearcher::BeginSearch, IUpdateDownloader::BeginDownload, IUpdateInstaller::BeginInstalloder IUpdateInstaller::BeginUninstallnicht unterstützt.