2009-03-25 27 views
5

¿Hay alguna manera de verificar desde .NET si la actualización de Windows está habilitada?Comprobar desde .NET si Windows Update está habilitado

Deseo solicitar a los usuarios que cada vez que inicien sesión en mi aplicación corran riesgo de que su computadora les dé un enlace al sitio web de actualización de Windows (o aplicación de actualización de Windows desde el panel de control).

Preferiblemente debería funcionar en XP, Vista y Windows 7. ¿Tal vez hay una clave de registro o incluso una mejor API?

Respuesta

8

Primera añadir una referencia a WUApiLib "C: \ windows \ system32 \ Wuapi.dll"

continuación, puede utilizar este fragmento de código.

WUApiLib.AutomaticUpdatesClass auc = new WUApiLib.AutomaticUpdatesClass(); 
bool active = auc.ServiceEnabled; 

MSDN: "La propiedad ServiceEnabled indica si todos los componentes que las Actualizaciones automáticas requieren están disponibles."

El Ajuste auc.Settings.NotificationLevel contiene la información sobre el modo actual. http://msdn.microsoft.com/en-us/library/aa385806(VS.85).aspx

+0

Recibo este error en Windows 7 x64 Ultimate cuando lo intento después de hacer referencia a este Dlls. El tipo WUApiLib.AutomaticUpdatesClass no tiene constructores definidos Amablemente ayuda. Gracias –

2

Puede verificar la siguiente clave de registro.

HKEY_LOCAL_MACHINE 
    SOFTWARE 
    Microsoft 
    Active Setup 
     Installed Components 
     {89820200-ECBD-11cf-8B85-00AA005B4340} 

Si su valor IsInstalled es 1 entonces Windows Update está instalado.

Esto fue tomada de:

http://windowsitpro.com/article/articleid/15266/how-can-i-detect-if-windows-update-is-installed-on-a-machine.html

De hecho, me gusta mucho another answer a esta pregunta, pero, por desgracia, sólo es apoyada en XP SP3, que podría no ser factible.

+0

se podría instalar y en modo "deshabilitado" ... –

1

Como alternativa, puede verificar si el servicio de Actualización de Windows se está ejecutando utilizando los objetos PROCESS.

Algo a lo largo de estas líneas:

Function CheckIfServiceIsRunning(ByVal serviceName As String) As Boolean 
    Dim mySC As ServiceProcess.ServiceController 
    mySC = New ServiceProcess.ServiceController(serviceName) 
    If mySC.Status = ServiceProcess.ServiceControllerStatus.Stopped Then 
     ' Service isn't running 
     Return False 
    ElseIf mySC.Status = ServiceProcess.ServiceControllerStatus.Running Then 
     ' Service already running 
     Return True 
    End If 
End Function 

si mal no recuerdo, el servicio correspondiente se denomina "Wuauserv"

5

Por supuesto, es su elección para hacer eso, pero le soliciten estos cada pocos minutos que WindowsUpdate era apagado fue, con mucho, el peor problema de usabilidad en XP.

No debe irritar a sus usuarios. Deberías amarlos. Y definitivamente no se inmiscuye en sus asuntos privados como comprobar si WU está apagado porque honestamente no es asunto suyo.

+1

¿Quién sabía que alguien con un nombre como SO chupa proporcionaría un buen consejo? +1 – BFree

+0

Gracias. Acabo de hacer un cambio de marca. – User

0
respuesta de

Michael Piendl no funcionó para mí, pero me dio la información que necesitaba para hacer que funcione:

WUApiLib.AutomaticUpdatesClass auc = new WUApiLib.AutomaticUpdatesClass();<br> 
string notificationLevel = auc.Settings.NotificationLevel.ToString();<br><br> 

La cadena notificationLevel será igual a cosas diferentes dependiendo de qué opción se elige del Cuadro de diálogo "Actualizaciones automáticas".

Cuestiones relacionadas