NTDOC,
I probably should have written some instructions on how to use the script once it's working.
1) Set the default directories.
2) Scan the computers you wish to collect the info from via the "Scan Computers" form.
3) Parse all of the log files into the access database via the "Database Management" form. All of your .log files should appear in the listbox on the left side of the form.
4) Either select "Search for software by computer" or "Search for computer by software". The necessary functions to collect this information kick off when you select the button on the menu. The progress bar at the bottom will show how far along the process is.

If you are not getting any results in step 4 then check the files in this order.
1) Check to see there are .log files in the directory where you specified the log files to be placed.
2) Check to see there is actually text within these .log files.
3) Check to see there is data in the database. There should be a table called TBL_PROGRAM in the database. Within this table there should be two columns, one for computer name and the other for program name. If this table is empty then the "Parse all logg files now" either didn't work or it was never selected. If there is information in the table then step 4 from above should work.

I intentionally designed this to only scan NT4+ systems because of the remote registry dependency (I could be wrong but I believe the remote readvalue depends on remote registry service) plus I don't have any 9X machines on my network.

As far as creating a logon script alternative, I copied the scan function out of the main script and edited it to work locally instead of remotely.
code:
$logpath = "\\server\share"
Dim $programs
Dim $Subkeys

$index = -1
While @error = 0
ReDim preserve $subkeys[Ubound($subkeys)+1]
$index = $index+1
$subkeys[Ubound($subkeys)] = EnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",$index)
Loop

For Each $key in $subkeys
$Displayname = ReadValue ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$key","Displayname")
If $Displayname <> ""
ReDim preserve $programs[Ubound ($programs)+1]
$programs[Ubound($programs)] = $Displayname
EndIf
Next
$nul = ReDirectOutput ("$logpath\@WKSTA.log",1)
join($programs,"~*~")
$nul = ReDirectOutput("")

I tried your script and it would be possible for me to modify my script to work with your current .log format. If you look at one of the output files from my script you'll notice I put everything on one line. I did this in an attempt to make the (both scan and report) scripts work faster. Instead of writing multiple times and reading multiple times it does one for each. I don't know how much time this ended up saving if it saved any at all, I thought it was a good idea.

For what it matters I tried this on my domain a couple days ago. So far I've collected 535 .log files and after parsing them into the DB, the DB has over 14,000 records. With this many entries in the DB the Searching forms take a while to process through the information. I don't know how to make this faster than it already is. Considering it has to strip only unique strings out of an array that contains 14,000 strings I think it's still fairly fast. I'm open to suggestions.

Also, can anyone suggest a packager so I can make the setup a little less painful?

Thanks