如果启用了Windows更新,有没有办法从.NET检查?
我想在每次登录我的应用程序时提示用户他们的计算机可能存在风险并向他们提供指向Windows更新网站的链接(或从控制面板更新Windows应用程序)。
最好它适用于XP,Vista和Windows 7.也许有一个注册表项或更好的API?
答案 0 :(得分:8)
首先添加对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
答案 1 :(得分:5)
当然,您可以选择这样做,但每隔几分钟就会提示WindowsUpdate已关闭,这是XP中最糟糕的可用性问题。
您不想激怒您的用户。你应该爱他们。并且绝对不会干涉他们的私人事务,例如检查WU是否已关闭,因为老实说这不属于你的业务。
答案 2 :(得分:3)
我相信你可以使用Windows Update Agent API.
来做到这一点有关详细信息,请参阅IAutomaticUpdates。
答案 3 :(得分:2)
您可以检查以下注册表项。
HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Active Setup
Installed Components
{89820200-ECBD-11cf-8B85-00AA005B4340}
如果其IsInstalled值为1,则安装Windows Update。
这取自:
我实际上真的喜欢another answer这个问题,但不幸的是,它只支持XP SP3,这可能不太可行。
答案 4 :(得分:1)
或者,您可以使用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”
答案 5 :(得分:0)
Michael Piendl的答案对我不起作用,但它给了我使其成功所需的信息:
WUApiLib.AutomaticUpdatesClass auc = new WUApiLib.AutomaticUpdatesClass();<br>
string notificationLevel = auc.Settings.NotificationLevel.ToString();<br><br>
根据从“自动更新”对话框中选择的选项,notificationLevel
字符串将具有不同的含义。