2009-03-25 27 views
5

Czy jest jakiś sposób sprawdzenia w .NET, jeśli jest włączona aktualizacja systemu Windows?Sprawdź w .NET, czy usługa Windows Update jest włączona.

Chcę monitować użytkowników za każdym razem, gdy logują się do mojej aplikacji, że ich komputer może być zagrożony i dać im link do witryny aktualizacji systemu Windows (lub aplikacji aktualizacji systemu Windows z panelu sterowania).

Najlepiej powinna działać na XP, Vista i Windows 7. Może istnieje klucz rejestru lub jeszcze lepszy interfejs API?

Odpowiedz

8

Pierwszy dodać odwołanie do WUApiLib "c: \ windows \ system32 \ Wuapi.dll"

Następnie można użyć tego fragmentu kodu.

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

MSDN: "Właściwość ServiceEnabled wskazuje, czy są dostępne wszystkie składniki wymagane przez Aktualizacje automatyczne."

Ustawienie auc.Settings.NotificationLevel zawiera informacje o bieżącym trybie. http://msdn.microsoft.com/en-us/library/aa385806(VS.85).aspx

+0

Otrzymuję ten błąd w systemie Windows 7 x64 Ultimate podczas próby odniesienia po tym pliku DLL. Typ WUApiLib.AutomaticUpdatesClass nie ma zdefiniowanych konstruktorów. Prosimy o pomoc. Dzięki –

2

Możesz sprawdzić następujący klucz rejestru.

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

Jeśli wartość IsInstalowana wynosi 1, wówczas zostanie zainstalowana usługa Windows Update.

ta została zaczerpnięta z:

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

I rzeczywiście bardzo podobny another answer na to pytanie, ale niestety, to jest obsługiwane tylko na XP SP3, co może nie być możliwe.

+0

może zostać zainstalowany iw trybie "wyłączony" ... –

1

Można również sprawdzić, czy usługa Windows Update działa przy użyciu obiektów PROCESS.

Coś wzdłuż tych linii:

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 

jeśli mnie pamięć nie myli, stosowana usługa nazywa się „wuauserv”

5

Oczywiście jest to Twój wybór, aby to zrobić, ale coraz poproszony co kilka minut, że WindowsUpdate było wyłączony był zdecydowanie najgorszy problem użyteczności w XP.

Nie chcesz drażnić swoich użytkowników. Powinieneś ich pokochać. I zdecydowanie nie przeszkadzaj w ich prywatnych sprawach, jak sprawdzanie, czy WU jest wyłączona, bo szczerze to nie twoja sprawa.

+1

Kto wiedział, że ktoś o imieniu takim jak SO jest do kitu, dostarczyłby takiej dobrej porady? +1 – BFree

+0

Dzięki. Właśnie dokonałem rebrandingu. – User

0
odpowiedź

Michaela Piendl za nie działa dla mnie, ale to dało mi niezbędne informacje, aby to działało:

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

Ciąg notificationLevel wyniesie różne rzeczy w zależności od tego, która opcja jest wybrana z Okno "Aktualizacje automatyczne".

Powiązane problemy