Linee guida per le operazioni WUA asincrone

Questo argomento identifica le linee guida da seguire quando si eseguono operazioni asincrone di Windows Update Agent (WUA).

  • Le operazioni WUA asincrone non garantiscono una particolare velocità di completamento. Il tempo di completamento per un'operazione WUA asincrona può variare notevolmente a seconda dell'hardware del computer, della versione del sistema operativo e della configurazione di rete. Come per altre API di Windows con dipendenze di rete e che non contengono un parametro di timeout o una durata di timeout documentata, è consigliabile implementare meccanismi di timeout personalizzati se sono necessari tempi di risposta garantiti. Ad esempio, è possibile creare un thread di lavoro che chiama un metodo WUA asincrono e che imposta un evento o un altro oggetto di sincronizzazione al termine dell'operazione WUA asincrona; Il thread principale può quindi usare la funzione WaitForSingleObject o WaitForMultipleObjects, che consente di specificare un valore di timeout.
  • Quando si termina una ricerca, un download, un'installazione o una disinstallazione degli aggiornamenti, è possibile usare IUpdateSearcher::EndSearch, IUpdateDowloader::EndDownload, IUpdateInstaller::EndInstaller::EndInstaller::EndUninstall da qualsiasi thread.
  • Quando si avvia una ricerca, un download, un'installazione o una disinstallazione degli aggiornamenti usando IUpdateSearcher::BeginSearch, IUpdateDownloader::BeginDownloader, IUpdateInstaller::BeginInstaller::BeginUninstall, assicurarsi di mantenere autorizzazioni di accesso sufficienti quando si rilasciano riferimenti agli oggetti API WUA.
    • Assicurarsi che tutti gli oggetti callback usati nell'operazione asincrona non vengano richiamati prima di eliminarli. Attendere che il conteggio dei riferimenti di un oggetto callback restituisca il valore iniziale prima di eliminarlo.
    • Il riferimento all'oggetto processo restituito dal metodo Begin corrispondente deve essere controllato da un oggetto diverso dagli oggetti callback. Utilizzare un oggetto diverso dagli oggetti callback per evitare riferimenti circolari.
    • Se si tenta di controllare il riferimento all'oggetto processo usando un oggetto callback, è necessario chiamare il metodo IDownloadJob::CleanUp, IInstallationJob::CleanUp o ISearchJob::CleanUp all'esterno della funzione di callback per disconnettere l'oggetto processo dall'oggetto callback. È necessario eseguire questa operazione prima di rilasciare il riferimento all'oggetto processo restituito dal metodo Begin .
  • Assicurarsi che le operazioni WUA asincrone siano completate. Windows Script Host può terminare uno script quando tutti i comandi all'esterno di qualsiasi funzione sono completati, anche se l'API WUA ha ancora riferimenti all'oggetto callback.
    • Usare uno dei metodi CleanUp o impostare una variabile globale condivisa al termine della funzione di callback.
    • Non chiamare mai IDownloadJob::CleanUp, IInstallationJob::CleanUp o ISearchJob::CleanUp in un oggetto processo nella relativa funzione di callback.
    • Per garantire la sequenza di pulizia corretta in uno script in esecuzione in Windows Internet Explorer, chiamare il metodo CleanUp su tutti gli oggetti processo durante l'elaborazione di window.onbeforeunload.
  • Non usare tipi di dati definiti dall'utente (UDT) per le operazioni WUA asincrone. Il tipo non è supportato da IUpdateSearcher::BeginSearch, IUpdateDownloader::BeginDownloader, IUpdateInstaller::BeginInstall o IUpdateInstaller::BeginUninstall.