WUAPILib

G

Guest

Hi,

Not sure where this post belongs so please excuse me if it’s in the wrong
group.

I’m trying to use the WUAPILib.dll from Windows Update v5 with VB.NET. I
can instantiate it locally fine but what I really need is to be able to do
this remotely.

My first thought was to use CreateObject:

Dim wu As Object = CreateObject("Microsoft.Update.Searcher.1", "XP-TEST1")

This always returns “ActiveX Cannot Create Objectâ€.

It’s worth noting that the XP machine doesn’t have SP 2 on it, I’ve just
upgraded WU to v5. This rules out any firewall or enhanced security
configuration issues.

I thought it may be a DCOM configuration issue but when I looked on the XP
box, it looks like the WU library doesn’t support remote instantiation.
Perhaps a way around this is to use WMI to instantiate the API locally but
can WMI be used as a proxy?

Any thoughts or pointers would be greatly appreciated.
 
D

David Herman .:MVP:.

Glen,

Can you provide more information with regard to what you want to do?

That way I may be able to write some sample code etc for you.

-David Herman
 
G

Guest

David,

Thanks for the reply. I need to be able to extract the update history from
a WU v5 machine. As I said below, I can do it locally but I need to be able
to do it remotely from a central machine. Previously, I could just parse the
iuhist.xml file but v5 uses the JET database format (EDB).

If you open up a new project and then add a reference to WUAPI 2.0 Type
Library. The development machine needs to have WU v5 installed.

Here is a quick sub to test the update history query:

Private Sub updateSearcher()
Try
' This will instantiate the api locally.
Dim wu As New WUApiLib.UpdateSearcher

' This "should" instantiate it remotely
' Dim wu As Object = CreateObject("Microsoft.Update.Searcher.1",
"XP-TEST1")

wu.Online = True

Dim i As Integer = wu.GetTotalHistoryCount

Dim c As WUApiLib.IUpdateHistoryEntryCollection

c = wu.QueryHistory(0, i)

Dim e As WUApiLib.IUpdateHistoryEntry

i = 1

For Each e In c
Console.WriteLine("Title: {0}", e.Title)
Console.WriteLine("Operation: {0}", e.Operation.ToString)
Console.WriteLine("Description: {0}", e.Description)
Console.WriteLine("ResultCode: {0}", e.ResultCode.ToString)

Console.WriteLine("ClientApplicationID: {0}",
e.ClientApplicationID)
Console.WriteLine("UpdateIdentity: {0}",
e.UpdateIdentity.UpdateID)

Console.WriteLine("------------------------------------------------------------------")

If i > 5 Then
Console.Write("Press enter to continue...")
Console.ReadLine()
Console.WriteLine()
i = 1
Else
i += 1
End If
Next
Catch ex As Exception
Console.Write(ex.Message)
End Try
End Sub

Perhaps there is an ODBC driver to read EDB files?

Anyway, look forward to seeing if you can come up with something!

Regards,

Glen

David Herman .:MVP:. said:
Glen,

Can you provide more information with regard to what you want to do?

That way I may be able to write some sample code etc for you.

-David Herman
 
D

David Herman .:MVP:.

I'm actually in the process of looking to write an app which does what you
want with the added feature of removing existing record. I'll keep you
posted.

-David Herman

GlenConway said:
David,

Thanks for the reply. I need to be able to extract the update history
from
a WU v5 machine. As I said below, I can do it locally but I need to be
able
to do it remotely from a central machine. Previously, I could just parse
the
iuhist.xml file but v5 uses the JET database format (EDB).

If you open up a new project and then add a reference to WUAPI 2.0 Type
Library. The development machine needs to have WU v5 installed.

Here is a quick sub to test the update history query:

Private Sub updateSearcher()
Try
' This will instantiate the api locally.
Dim wu As New WUApiLib.UpdateSearcher

' This "should" instantiate it remotely
' Dim wu As Object =
CreateObject("Microsoft.Update.Searcher.1",
"XP-TEST1")

wu.Online = True

Dim i As Integer = wu.GetTotalHistoryCount

Dim c As WUApiLib.IUpdateHistoryEntryCollection

c = wu.QueryHistory(0, i)

Dim e As WUApiLib.IUpdateHistoryEntry

i = 1

For Each e In c
Console.WriteLine("Title: {0}", e.Title)
Console.WriteLine("Operation: {0}", e.Operation.ToString)
Console.WriteLine("Description: {0}", e.Description)
Console.WriteLine("ResultCode: {0}", e.ResultCode.ToString)

Console.WriteLine("ClientApplicationID: {0}",
e.ClientApplicationID)
Console.WriteLine("UpdateIdentity: {0}",
e.UpdateIdentity.UpdateID)

Console.WriteLine("------------------------------------------------------------------")

If i > 5 Then
Console.Write("Press enter to continue...")
Console.ReadLine()
Console.WriteLine()
i = 1
Else
i += 1
End If
Next
Catch ex As Exception
Console.Write(ex.Message)
End Try
End Sub

Perhaps there is an ODBC driver to read EDB files?

Anyway, look forward to seeing if you can come up with something!

Regards,

Glen
 
D

David Herman .:MVP:.

I want to get started and finish by the end of this weekend, i hope. May get
the dev team in WU at MS to take a look too, to make sure its up to scratch.

-David Herman

GlenConway said:
David,

Look forward to it. Do you have any timescales?

Thanks

Glen

David Herman .:MVP:. said:
I'm actually in the process of looking to write an app which does what
you
want with the added feature of removing existing record. I'll keep you
posted.

-David Herman
 
G

Guest

Hi David,

Did you get anywhere with the code this weekend? Have you anything that I
can play around with?

Thanks

Glen
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top