Проверьте из .NET, если Центр обновления Windows включен - PullRequest
5 голосов
/ 25 марта 2009

Есть ли способ проверить из .NET, включено ли обновление Windows?

Я хочу при каждом входе в мое приложение сообщать пользователям, что их компьютер может быть подвержен риску, и давать им ссылку на веб-сайт обновления Windows (или приложение обновления Windows из панели управления).

Желательно, чтобы он работал на XP, Vista и Windows 7. Может быть, есть раздел реестра или даже лучше API?

Ответы [ 6 ]

8 голосов
/ 25 марта 2009

Сначала добавьте ссылку на WUApiLib "C: \ windows \ system32 \ Wuapi.dll"

Тогда вы можете использовать этот фрагмент кода.

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

MSDN: «Свойство ServiceEnabled указывает, доступны ли все компоненты, необходимые для автоматического обновления.»

Параметр auc.Settings.NotificationLevel содержит информацию о текущем режиме. http://msdn.microsoft.com/en-us/library/aa385806(VS.85).aspx

5 голосов
/ 25 марта 2009

Конечно, это ваш выбор, но каждые несколько минут получать уведомление о том, что WindowsUpdate был отключен, было худшей проблемой юзабилити в XP.

Вы не хотите раздражать своих пользователей. Вы должны любить их. И определенно не вмешиваться в их личные дела, например, проверять, выключен ли WU, потому что, честно говоря, это не ваше дело.

3 голосов
/ 25 марта 2009

Я полагаю, что вы можете сделать это с помощью API агента обновления Windows.

Подробнее см. IAutomaticUpdates .

2 голосов
/ 25 марта 2009

Вы можете проверить следующий раздел реестра.

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

Если значение IsInstalled равно 1, то устанавливается Центр обновления Windows.

Это было взято из:

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

Мне действительно очень нравится другой ответ на этот вопрос, но, к сожалению, он поддерживается только в XP SP3, что может быть неосуществимо.

1 голос
/ 25 марта 2009

Кроме того, вы можете проверить, работает ли служба Центра обновления Windows с использованием объектов PROCESS.

Что-то вроде этого:

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

если память служит, соответствующая служба называется "Wuauserv"

0 голосов
/ 14 ноября 2013

Ответ Майкла Пендла не сработал для меня, но дал мне информацию, необходимую для его работы:

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

Строка notificationLevel будет соответствовать разным вещам в зависимости от того, какой параметр выбран в диалоговом окне «Автоматическое обновление».

...