我正在尝试调整此代码,以便它强制Windows Update搜索从Microsoft而不是本地WSUS服务器联机检查。如果我在公司网络之外运行此代码,但我希望从公司网络运行并绕过WSUS服务器,则此代码运行良好。
Private Sub CheckForUpdates()
Dim objUpdateSession As WUApiLib.UpdateSession
Dim objUpdateSearcher As WUApiLib.UpdateSearcher
Dim objSearchResults As WUApiLib.ISearchResult
Dim objUpdateDownloader As WUApiLib.UpdateDownloader
Dim NowInstallThem As WUApiLib.UpdateInstaller
Dim NumPatches As Integer = -1
Dim Updates As New WUApiLib.UpdateCollection
Try
objUpdateSession = New WUApiLib.UpdateSession
objUpdateSearcher = objUpdateSession.CreateUpdateSearcher()
objSearchResults = objUpdateSearcher.Search("IsInstalled=0 and Type='Software'")
NumPatches = objSearchResults.Updates.Count
MessageBox.Show("Number of patches: " & NumPatches.ToString)
Dim patch As WUApiLib.IUpdate
For a = 0 To NumPatches - 1
patch = objSearchResults.Updates.Item(a)
Updates.Add(patch)
Next
If NumPatches > 0 Then
objUpdateDownloader.Updates = Updates
objUpdateDownloader.Download()
MessageBox.Show("patches downloaded")
NowInstallThem.Updates = Updates
NowInstallThem.Install()
MessageBox.Show("patches installed")
End If
Catch ex As Exception
End Try
End Sub
这是由管理的
UseWUServer
在客户端注册表项上
HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdateAU
- 保存密钥的值
- 将其设置为";0"
- 安装一个计时器,可在10秒后重置该值
- 立即运行搜索
searchResult = updateSearcher.Search(...)
如果密钥或值不存在,则它已使用Microsoft Update Servers,。
这有点让人生气,但这是我找到的唯一方法。
意识到这是一个老问题(有一个相当新的答案),实现这一点的方法是将IUpdateSearcher
(在最初的示例中,objUpdateSearcher
实例)的ServerSelection
属性设置为ssWindowsUpdate
(2)。