es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Forma programática de verificar las actualizaciones de Windows

Estoy escribiendo una utilidad para configurar automáticamente algunas cosas en una nueva instalación de Windows 10. Una de las cosas que me gustaría que hiciera es realizar automáticamente el equivalente a hacer clic en el botón “Buscar actualizaciones” en la pantalla de Actualización de Windows. Estoy escribiendo la utilidad en Go.

Usando el paquete “ole”, he intentado crear un objeto COM a partir de la clase “Microsoft.Update.AutoUpdate” y llamar a “DetectNow()” en ese objeto. Pero esto parece no hacer nada, así que no estoy seguro si estoy haciendo algo mal al llamar a este método, o si hay alguna otra manera de verificar las actualizaciones.

¿Hay alguna forma de verificar programáticamente las actualizaciones de Windows utilizando COM o algún otro medio (no necesariamente en Go)?

EDIT: así es como llamo a DetectNow:

unknownobject, err := oleutil.CreateObject("Microsoft.Update.AutoUpdate")
if err != nil {
    log.Printf("No se pudo crear un objeto AutoUpdate: %v", err)
    error_y_salir()
}
iidautomaticupdates := ole.NewGUID("673425BF-C082-4C7C-BDFD-569464B8E0CE")
iautomaticupdates := unknownobject.MustQueryInterface(iidautomaticupdates)
defer iautomaticupdates.Release()
_, err = iautomaticupdates.CallMethod("DetectNow") // descartar el valor de retorno ya que siempre es nil
if err != nil {
    log.Printf("No se pudo iniciar las actualizaciones de Windows: %v", err)
    error_y_salir()
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Automatización de las actualizaciones de Windows en una instalación nueva de Windows 10

    Como experto en informática especializado en Go, COM, Windows 10 y actualizaciones de Windows, estás intentando escribir una utilidad para automatizar la verificación de actualizaciones de Windows en una máquina recién instalada con Windows 10. La utilidad deberá pulsar automáticamente el botón “Buscar actualizaciones” en la pantalla de actualizaciones de Windows. Has intentado crear un objeto COM a partir de la clase Microsoft.Update.AutoUpdate y llamar a DetectNow() en él, pero parece que no funciona.

    Para verificar las actualizaciones de Windows de forma programática utilizando COM u otros medios, se puede utilizar el siguiente fragmento de código:

    unknown_object, err := oleutil.CreateObject("Microsoft.Update.AutoUpdate")
    if err != nil {
        log.Printf("No se pudo crear un objeto AutoUpdate: %v", err)
        error_y_salida()
    }
    
    // Uso del GUID para crear iAutomaticUpdates
    iid_iautomaticupdates := ole.NewGUID("{673425BF-C082-4C7C-BDFD-569464B8E0CE}")
    iautomaticupdates := unknown_object.MustQueryInterface(iid_iautomaticupdates)
    defer iautomaticupdates.Release()
    
    // Llama al método DetectNow()
    _, err = iautomaticupdates.CallMethod("DetectNow")
    if err != nil {
        log.Printf("No se pudieron iniciar las actualizaciones de Windows: %v", err)
        error_y_salida()
    }
    

    Este código crea un objeto AutoUpdate utilizando la función oleutil.CreateObject() y luego consulta la interfaz para iAutomaticUpdates utilizando el GUID {673425BF-C082-4C7C-BDFD-569464B8E0CE}. Por último, llama al método DetectNow() en la interfaz iAutomaticUpdates para iniciar la actualización de Windows.

    Ten en cuenta que esto debería funcionar en cualquier plataforma que admita COM, no solo en Windows 10.

Comments are closed.