有没有办法从.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。
这是从:
我真的很喜欢这个问题的另一个答案 ,但不幸的是,它只支持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
字符串将等于不同的东西,这取决于从“自动更新”对话框中选择的选项。