Instructions pour les opérations WUA asynchrones

Cette rubrique identifie les instructions à suivre lorsque vous effectuez des opérations asynchrones de l’agent Windows Update (WUA).

  • Les opérations WUA asynchrones ne garantissent aucune vitesse d’achèvement particulière. Le temps d’achèvement d’une opération WUA asynchrone peut varier largement en fonction du matériel informatique, de la version du système d’exploitation et de la configuration réseau. Comme avec d’autres API Windows qui ont des dépendances réseau et qui ne contiennent pas de paramètre de délai d’attente ou de durée de délai d’attente documentée, nous vous recommandons d’implémenter vos propres mécanismes de délai d’attente si vous avez besoin de temps de réponse garantis. Par exemple, vous pouvez créer un thread de travail qui appelle une méthode WUA asynchrone et qui définit un événement ou un autre objet de synchronisation lorsque l’opération WUA asynchrone se termine ; le thread principal peut ensuite utiliser la fonction WaitForSingleObject ou WaitForMultipleObjects, qui vous permet de spécifier une valeur de délai d’attente.
  • Lorsque vous terminez une recherche, un téléchargement, une installation ou une désinstallation de mises à jour, vous pouvez utiliser IUpdateSearcher::EndSearch, IUpdateDowloader::EndDownload, IUpdateInstaller::EndInstall etIUpdateInstaller::EndUninstall à partir de n’importe quel thread.
  • Lorsque vous démarrez une recherche, un téléchargement, une installation ou une désinstallation de mises à jour à l’aide de IUpdateSearcher::BeginSearch, IUpdateDownloader::BeginDownload, IUpdateInstaller::BeginInstall et IUpdateInstaller::BeginUninstall, veillez à maintenir des autorisations d’accès suffisantes lorsque vous publiez des références à des objets d’API WUA.
    • Veillez à ce que les objets de rappel utilisés dans l’opération asynchrone soient déréférencés avant de les détruire. Attendez que le nombre de références d’un objet de rappel retourne à la valeur initiale avant de le détruire.
    • La référence à l’objet de travail retourné par la méthode Begin correspondante doit être contrôlée par un objet qui diffère des objets de rappel. Utilisez un objet qui diffère des objets de rappel pour éviter les références circulaires.
    • Si vous tentez de contrôler la référence à l’objet de travail à l’aide d’un objet de rappel, vous devez appeler la méthode IDownloadJob::CleanUp, IInstallationJob::CleanUp ou ISearchJob::CleanUp en dehors de la fonction de rappel pour déconnecter l’objet de travail de l’objet de rappel. Vous devez le faire avant de libérer la référence à l’objet de travail retourné par la méthode Begin.
  • Vérifiez que les opérations WUA asynchrones sont terminées. L’environnement d'exécution de scripts WSH (Windows Script Host) peut arrêter un script lorsque toutes les commandes en dehors d’une fonction sont terminées, même si l’API WUA a toujours des références à l’objet de rappel.
    • Utilisez l’une des méthodes CleanUp ou faites en sorte que la fonction de rappel définisse une variable globale partagée lors de l’achèvement.
    • N’appelez jamais IDownloadJob::CleanUp, IInstallationJob::CleanUp ou ISearchJob::CleanUp sur un objet de travail dans sa fonction de rappel.
    • Pour garantir la séquence de nettoyage correcte dans un script qui s’exécute sur Windows Internet Explorer, appelez la méthode CleanUp sur tous les objets de travail lors du traitement de window.onbeforeunload.
  • N’utilisez pas de types de données définis par l’utilisateur pour les opérations WUA asynchrones. Le type n’est pas pris en charge par IUpdateSearcher::BeginSearch, IUpdateDownloader::BeginDownload, IUpdateInstaller::BeginInstall ou IUpdateInstaller::BeginUninstall.