如果启用了Windows Update,请从.NET进行检查

有没有办法从.NET检查,如果Windows更新启用?

我想提醒用户每次login到我的应用程序,他们的计算机可能有风险,并给他们一个链接到Windows更新网站(或从控制面板的Windows更新应用程序)。

最好它应该在XP,Vista和Windows 7上工作。也许有一个registry项,甚至更好的API?

首先添加一个对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

当然,这是你的选择,但是每隔几分钟就会提示WindowsUpdate关闭是XP中最糟糕的可用性问题。

你不想刺激你的用户。 你应该爱他们。 绝对不要干涉他们的私人事务,比如检查WU是否关闭,因为说实话这不是你的事情。

我相信你可以通过使用Windows更新代理API来做到这一点。

有关详细信息,请参阅IAutomaticUpdates 。

您可以检查以下注册表项。

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

如果它的IsInstalled值是1,则安装Windows Update。

这是从:

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

我真的很喜欢这个问题的另一个答案 ,但不幸的是,它只支持XP SP3,这可能是不可行的。

或者,您可以使用PROCESS对象检查Windows Update服务是否正在运行。

沿着这些线路的东西:

 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”

Michael Piendl的回答对我来说并不奏效,但它给了我所需要的信息,使之成为可能:

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

notificationLevel字符串将等于不同的东西,这取决于从“自动更新”对话框中选择的选项。