Richtlinien für asynchrone WUA-Vorgänge

In diesem Thema werden Richtlinien für Sie beschrieben, die Sie befolgen können, wenn Sie asynchrone Windows Update Agent (WUA)-Vorgänge ausführen.

  • Die asynchronen WUA-Vorgänge garantieren keine bestimmte Fertigstellungsgeschwindigkeit. Die Abschlusszeit für einen asynchronen WUA-Vorgang kann je nach Computerhardware, Version des Betriebssystems und Netzwerkkonfiguration stark variieren. Wie bei anderen Windows-APIs mit Netzwerkabhängigkeiten und die keinen Timeoutparameter oder eine dokumentierte Timeoutdauer enthalten, empfiehlt es sich, ihre eigenen Timeoutmechanismen zu implementieren, wenn Sie garantierte Reaktionszeiten benötigen. Sie können z. B. 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 WaitForSingleObject- oder die WaitForMultipleObjects-Funktion verwenden, mit der Sie einen Timeoutwert angeben können.
  • Wenn Sie eine Suche, einen Download, eine Installation oder eine Deinstallation von Updates beenden, können Sie IUpdateSearcher::EndSearch, IUpdateDowloader::EndDownload, IUpdateInstaller::EndInstall und IUpdateInstaller::EndUninstall von einem beliebigen Thread aus verwenden.
  • Wenn Sie eine Suche, einen Download, eine Installation oder eine Deinstallation von Updates mithilfe von IUpdateSearcher::BeginSearch, IUpdateDownloader::BeginDownload, IUpdateInstaller::BeginInstall und IUpdateInstaller::BeginUninstall 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 in der asynchronen Operation verwendet werden, nicht referenziert sind, bevor Sie sie zerstören. Warten Sie, bis die Referenzanzahl eines Rückrufobjekts an den Anfangswert zurückgegeben wird, bevor Sie es zerstören.
    • Der Verweis auf das Auftragsobjekt, das von der entsprechenden Begin-Methode zurückgegeben wird, sollte durch ein Objekt gesteuert werden, das sich von den Rückrufobjekten unterscheidet. Verwenden Sie ein Objekt, das sich von den Rückrufobjekten unterscheidet, um Zirkelbezüge zu vermeiden.
    • Wenn Sie versuchen, den Verweis auf das Auftragsobjekt mithilfe eines Rückrufobjekts zu steuern, müssen Sie die Methoden IDownloadJob::CleanUp, IInstallationJob::CleanUp oder 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 Script Host kann ein Skript beenden, wenn alle Befehle außerhalb einer Funktion abgeschlossen sind, auch wenn die WUA-API weiterhin Verweise auf das Rückrufobjekt enthält.
    • Verwenden Sie eine der CleanUp-Methoden oder legen Sie nach Abschluss der Rückruffunktion eine freigegebene globale Variable fest.
    • Rufen Sie niemals IDownloadJob::CleanUpoder, IInstallationJob::CleanUpoder, oder ISearchJob::CleanUp auf einem Job-Objekt in seiner Rückruffunktion auf.
    • Um die korrekte Aufräumreihenfolge in einem Skript sicherzustellen, das unter Windows Internet Explorer ausgeführt wird, rufen Sie die CleanUp-Methode für alle Jobobjekte auf, wenn Sie window.onbeforeunload verarbeiten.
  • Verwenden Sie keine benutzerdefinierten Datentypen (UDT) für asynchrone WUA-Vorgänge. Der Typ wird von IUpdateSearcher::BeginSearch, IUpdateDownloader::BeginDownload, IUpdateInstaller::BeginInstalloder, oder IUpdateInstaller::BeginUninstall nicht unterstützt.