事實證明,我沒有在我的代碼中引用WUApi.DLL。一旦我將該引用放入,我成功地將我的結果作爲IUpdate3進行投射,這使我可以訪問BrowseOnly字段。
見下文(IUpdate3使用周圍的代碼塊的中間)...
''' <summary>
''' Performs a windows update check for any updates that are...
''' A: Not installed
''' B: Not hidden
''' C: Software updates (OS and software, no hardware updates)
''' </summary>
''' <returns>0 on success, 1 on failure</returns>
''' <remarks></remarks>
Function checkForUpdates() As Integer
Dim updateSession ' Object to hold our MS Update Session
Dim updateSearcher ' Object to perform our MS Win Update Search
Dim results ' Object to hold our MS Win Update Search Results
Dim stopWatch As New Stopwatch()
stopWatch.Start()
outputWriter.WriteLine("----WINDOWS [email protected] " & Now, False)
outputWriter.WriteLine(" -We are beginning our update search. Please note, this may take a few minutes." & _
" On Windows Server 2003 this may take 800 years.", False)
' We cannot guarantee the update check will succeed, so use a try catch in case of error.
Try
updateSession = CreateObject("Microsoft.Update.Session")
updateSearcher = updateSession.CreateUpdateSearcher()
results = updateSearcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0")
Catch ex As Exception
outputWriter.WriteLine(" ERROR: Something went wrong in our update search. Details below...", False)
outputWriter.WriteLine(" Error Msg: " & ex.Message, False)
Return 1
End Try
outputWriter.WriteLine(" -Windows update search has successfully completed. Beginning iteration of result set...", False)
' Similar to above, we cannot guarantee iterating through our result set will succeed. Use a try catch.
Try
Dim totalUpdates = results.Updates.Count
outputWriter.WriteLine("-----Windows [email protected] " & Now, True)
If results.Updates.Count = 0 Then
outputWriter.WriteLine("Total Updates: 0", True)
outputWriter.WriteLine("Important: 0", True)
outputWriter.WriteLine("Optional: 0", True)
Else
Dim imp_updates = 0
Dim opt_updates = 0
For i = 0 To totalUpdates - 1
Dim update = results.Updates.Item(i)
If CType(update, WUApiLib.IUpdate3).BrowseOnly = True Then ' BrowseOnly is specifically used for whether an update is deemed optional or not (True for optional)
opt_updates = opt_updates + 1
Else
imp_updates = imp_updates + 1
End If
Next
outputWriter.WriteLine("Total Updates: " & totalUpdates, True)
outputWriter.WriteLine("Important: " & imp_updates, True)
outputWriter.WriteLine("Optional : " & opt_updates, True)
End If
stopWatch.Stop()
If stopWatch.ElapsedMilliseconds >= 1000 Then
outputWriter.WriteLine("--------Total Time: " & Math.Round((CDbl(stopWatch.ElapsedMilliseconds)/1000), 2) & " Sec----------------" & vbCrLf, True)
Else
outputWriter.WriteLine("--------Total Time: " & stopWatch.ElapsedMilliseconds & " MS-------------------" & vbCrLf, True)
End If
Catch ex As Exception
outputWriter.WriteLine(" ERROR: We encountered an issue while iterating through Windows Update Search Results. Details below...", False)
outputWriter.WriteLine(" Error Msg: " & ex.Message, False)
Return 1
End Try
outputWriter.WriteLine(" -Iteration of Windows Update Search Results has successfully completed.", False)
outputWriter.WriteLine("-------------------------" & vbCrLf, False)
' Clean up our objects.
updateSession = Nothing
updateSearcher = Nothing
results = Nothing
' Success!
Return 0
End Function
我從MSDN文檔看到'IUpdate3'從'IUpdate'繼承(通過'IUpdate2')。你有沒有嘗試投射到「IUpdate3」?顯示您的搜索代碼可能有幫助。 – Vache 2014-09-29 19:53:34