Directrices para las operaciones asincrónicas de WUA
En este tema se identifican las instrucciones que se indican a continuación al realizar operaciones asincrónicas del Agente de Windows Update (WUA).
- Las operaciones asincrónicas de WUA no garantizan ninguna velocidad de finalización determinada. El tiempo de finalización de una operación de WUA asincrónica puede variar ampliamente en función del hardware del equipo, la versión del sistema operativo y la configuración de red. Al igual que con otras API de Windows que tienen dependencias de red y que no contienen un parámetro de tiempo de espera o una duración de tiempo de espera documentada, se recomienda implementar sus propios mecanismos de tiempo de espera si necesita tiempos de respuesta garantizados. Por ejemplo, puede crear un subproceso de trabajo que llame a un método WUA asincrónico y que establezca un evento u otro objeto de sincronización cuando se complete la operación asincrónica de WUA; Después, el subproceso principal puede usar la función WaitForSingleObjecto WaitForMultipleObjects, que permite especificar un valor de tiempo de espera.
- Al finalizar una búsqueda, descarga, instalación o desinstalación de actualizaciones, puede usar IUpdateSearcher:EndSearch,IUpdateDowloader:EndDownload, IUpdateInstaller:EndInstall yIUpdateInstaller:EndUninstall desde cualquier subproceso.
- Al iniciar una búsqueda, descarga, instalación o desinstalación de actualizaciones mediante IUpdateSearcher:BeginSearch, IUpdateDownloader:BeginDownload, IUpdateInstaller:BeginInstall, y IUpdateInstaller:BeginUninstall, asegúrese de mantener los permisos de acceso suficientes al liberar referencias a objetos de API de WUA.
- Asegúrese de que los objetos de devolución de llamada que se usan en la operación asincrónica no tienen referencia antes de destruirlos. Espere a que el recuento de referencias de un objeto de devolución de llamada vuelva al valor inicial antes de destruirlo.
- La referencia al objeto de trabajo que se devuelve del método Begin correspondiente debe controlarse mediante un objeto que difiere de los objetos de devolución de llamada. Use un objeto que difiere de los objetos de devolución de llamada para evitar referencias circulares.
- Si intenta controlar la referencia al objeto de trabajo mediante un objeto de devolución de llamada, debe llamar al IDownloadJob:CleanUp, IInstallationJob::CleanUp, o ISearchJob: CleanUp método fuera de la función de devolución de llamada para desconectar el objeto de trabajo del objeto de devolución de llamada. Debe hacerlo antes de liberar la referencia al objeto de trabajo devuelto por el método Begin.
- Asegúrese de que se completen las operaciones asincrónicas de WUA. El host de script de Windows puede finalizar un script cuando se completen todos los comandos fuera de cualquier función, incluso si la API de WUA todavía tiene referencias al objeto de devolución de llamada.
- Use uno de los métodos de CleanUp o haga que la función de devolución de llamada establezca una variable global compartida tras la finalización.
- Nunca llame a IDownloadJob:CleanUp, IInstallationJob:CleanUp, o ISearchJob:CleanUpen un objeto de trabajo en su función de devolución de llamada.
- Para asegurarse de que la secuencia de limpieza correcta en un script que se ejecuta en Windows Internet Explorer, llame al método CleanUp en todos los objetos de trabajo al procesar window.onbeforeunload.
- No use tipos de datos definidos por el usuario (UDT) para operaciones de WUA asincrónicas. El tipo no es admitido con IUpdateSearcher:BeginSearch,IUpdateDownloader:BeginDownload,IUpdateInstaller:BeginInstall, oIUpdateInstaller: BeginUninstall.