Compartilhar via


Diretrizes para as operações assíncronas do WUA

Este tópico identifica diretrizes a serem seguidas ao executar as operações assíncronas do Windows Update Agent (WUA).

  • “As operações assíncronas do WUA não garantem nenhuma velocidade de conclusão específica. O tempo de conclusão de uma operação assíncrona do WUA pode variar muito dependendo do hardware do computador, da versão do sistema operacional e da configuração da rede. Assim como acontece com outras APIs do Windows que têm dependências de rede e que não contêm um parâmetro de tempo limite ou uma duração de tempo limite documentada, recomendamos que você considere implementar seus próprios mecanismos de tempo limite se precisar de tempos de resposta garantidos. Por exemplo, você pode criar um thread de trabalho que chama um método assíncrono do WUA e que define um evento ou outro objeto de sincronização quando a operação assíncrona do WUA é concluída; O thread principal pode usar a função WaitForSingleObject ou WaitForMultipleObjects, que permite especificar um valor de tempo limite.
  • Ao encerrar uma pesquisa, download, instalação ou desinstalação de atualizações, você pode usar IUpdateSearcher::EndSearch, IUpdateDowloader::EndDownload, IUpdateInstaller::EndInstall and IUpdateInstaller::EndUninstall de qualquer thread.
  • Ao iniciar uma pesquisa, download, instalação ou desinstalação de atualizações usando IUpdateSearcher::BeginSearch, IUpdateDownloader::BeginDownload, IUpdateInstaller::BeginInstall e IUpdateInstaller::BeginUninstall, certifique-se de manter as permissões de acesso suficientes ao liberar referências a objetos de API do WUA.
    • Certifique-se de que todos os objetos de retorno de chamada usados na operação assíncrona não tenham referência antes de destruí-los. Aguarde até que a contagem de referência de um objeto de retorno de chamada retorne ao valor inicial antes de destruí-lo.
    • A referência ao objeto de trabalho retornado do método Begin correspondente deve ser controlada por um objeto que difere dos objetos de retorno de chamada. Use um objeto que difere dos objetos de retorno de chamada para evitar referências circulares.
    • Se você tentar controlar a referência ao objeto de trabalho usando um objeto de retorno de chamada, deverá chamar o método IDownloadJob::CleanUp, IInstallationJob::CleanUp ou ISearchJob::CleanUp fora da função de retorno de chamada para desconectar o objeto de trabalho do objeto de retorno de chamada. Você deve fazer isso antes de liberar a referência ao objeto de trabalho retornado pelo método Begin.
  • Certifique-se de que as operações assíncronas do WUA estão concluídas. O Windows Script Host pode encerrar um script quando todos os comandos fora de qualquer função forem concluídos, mesmo que a API do WUA ainda tenha referências ao objeto de retorno de chamada.
    • Use um dos métodos CleanUp ou tenha a função de retorno de chamada definida como uma variável global compartilhada após a conclusão.
    • Nunca chame IDownloadJob::CleanUp, IInstallationJob::CleanUp ou ISearchJob::CleanUp em um objeto de trabalho em sua função de retorno de chamada.
    • Para garantir a sequência de limpeza correta em um script em execução no Windows Internet Explorer, chame o método CleanUp em todos os objetos de trabalho ao processar window.onbeforeunload.
  • Não use os tipos de dados definidos pelo usuário (UDT) para operações assíncronas do WUA. O tipo não é suportado por IUpdateSearcher::BeginSearch, IUpdateDownloader::BeginDownload, IUpdateInstaller::BeginInstall ou IUpdateInstaller::BeginUninstall.