Jump to content

Windows XP Updates Downloader


dziubek

Recommended Posts


I've just ran the winupdl.cmd

It appears to be set for just set WINUPDL_Product=^^Windows XP.* and WINUPDL_ServicePack=Windows XP Service Pack 2.

However, looking in my downloads folder I can see files that arent just for XP - q331953_w2k_sp4_x86_en.exe

Maybe its just something Im doing wrong?

If I re-reun the winupdl.cmd ... will it skip files that already exist?

It would be nice if it downloaded to appropriate folders ... ie WinXP, Win2000, Win2003 ... maybe there is an option to do this? Obviously some files would be duplicated in each folder ... but I dont think I mind this ... unless those ones can be downloaded to a folder like "XP and 2003"

Link to comment
Share on other sites

The script is now running and is looking rather good. :)

However, it seems MS'slist is now for Microsoft Update, not just Windows Update so you end up having fixes for Microsoft Office.

And, I just received "; This is the Setup information file to install the Windows 98 SE Q239887 Update."

Search for "<ProductFamily ProductFamilyID="1" Name="BackOfficeResourceKit" RecentProductVersionID="" />" and "<ServicePack ServicePackID="1" Name=".NET Framework Gold" URL="n/a" ReleaseDate="" />".

Also a wonderful feature would be to have 2 simultaneous downloads.

Link to comment
Share on other sites

However, it seems MS'slist is now for Microsoft Update, not just Windows Update so you end up having fixes for Microsoft Office.

And, I just received "; This is the Setup information file to install the Windows 98 SE Q239887 Update."

However, looking in my downloads folder I can see files that arent just for XP - q331953_w2k_sp4_x86_en.exe

Do you mean you run this without any modifications and you end up getting updates for a different product?

I'll have to investigate this. On the day that I've released it M$ updated the mssecure file. I don't think it could break something but I'll have a closer look at what have they changed.

@Camarade_Tux:

Also a wonderful feature would be to have 2 simultaneous downloads.
That seems a good thing indeed. I'll have a look how it can be done.

As for running this to download things for different versions of windows, I thought about doing it this way:

separate configuration to a config file

add a cmdline switch to select a different config file than the default one

you can then have two separate config files say one for XP, one for 2K and run it as:

winupdl.cmd --profile 2k.conf

and it would dl things according to 2k.conf which could contain a separate download paths, etc.

What do you think about that?

Also, @sTe:

... will it skip files that already exist?

Yes it checks the timestamp of the files and will download only if they changed on the server.

Link to comment
Share on other sites

I tried again without changing anything to the config and it did not only download files for XP SP2.

For the profile thing, I think this is good.

Another nice addition would be to check if the hotfix does not already exist in another folder as most hotfixes work for more than one platform(folder specified in the config file).

;)

Link to comment
Share on other sites

The only script i have ever dreamed about.

Parse MSFT own list without effort.

:thumbup

but...

Expanding mssecure_1033.cab to mssecure.xml

mssecure_1033.cab: 321898 bytes expanded to 2817209 bytes, 775% increase.

Parsing updates list

Error: Document ends too soon

 in unamed entity at line 1 char 1 of <stdin>

Fatal LTSTD error (severity 1) at d:\work\LTXML\src\api\sgmlfiles.c.981: Parser

detected error

List of updates parsed

Downloading files from list file: "tmp\winupdl_4548_tmp_DLPaths"

and it starts downloading each update for all OS flavors...

maybe some inconstitency in current mssecure.xml?

Edited by Bilou_Gateux
Link to comment
Share on other sites

That is very weird :huh: I can't reproduce this bug. I've tried few times but I only get updates for XP (and one for WindowsMedia but it must be marked for XP in mssecure).

I'm attaching a script here: winupdl_prep_debug.zip which will save some information that could help me debug that. If you want to try it download it, then unzip to the directory where you have winupdl in. Now you'll have to run it, then run the debug version of script it generates (winupdl-debug.cmd) and after that's finished you have to run it the second time. After that's done you'd have to pack the log and tmp dirs from winupdl directory and send it over so I can have a look. My email is: tzeentch dot gm at googlemail dot com

Eh, I don't even want to start about Microsoft and it's practices. I've heard recently that they want to move everything to WSUS (aka Windows Server Update Services) and integrate it with Microsoft Update which means the xml file will become obsolete. I think they already stopped supporting it but they update it because the SMS 2.0 still uses that for updates.

Well, we shall see.

Link to comment
Share on other sites

I think its got something to do with winupdl_7393_tmp_ProductIDs

when you use: set WINUPDL_Product=^^Windows XP.*

it produces the winupdl_7393_tmp_ProductIDs with these entries:

181 (Windows XP Home Edition)

182 (Windows XP Media Center Edition)

183 (Windows XP Professional)

184 (Windows XP Tablet PC Edition)

In STEP 4: extract the location id

sggrep -r -q "BulletinDatastore/Bulletins/Bulletin/Patches/Patch[ SeverityID = '^(!WINUPDL_SeverityIDs!

|4)' ]" -s ".*/AffectedProduct[ ProductID = '^(!WINUPDL_ProductIDs!|184)' ]/AffectedServicePack[ ServicePackID = '^(244)' ]

" -- mssecure.xml | sgmltrans -r tmp\winupdl_15814_tmp_xml.transform | sed -e "s/\t*//g" -e "/^$/d" 1>tmp\winupdl_15814_tmp_PatchLocationIDs

Error: Document ends too soon

in unnamed entity at line 1 char 1 of <stdin>

Fatal LTSTD error (severity 1) at D:\work\LTXML\src\api\sgmlfiles.c.981: Parser detected error

it searchs the severity ID (in my case 4) against the product id 184 and servicepackID 244, which comes up with null, so it never creates winupdl_7393_tmp_PatchLocationIDs properly because sggrep throws a parse error or something,(null string?) so when it goes to step 5

sggrep -r "BulletinDatastore/Locations/Location[ LocationID = '^()' ]" -- mssecure.xml | sgmltrans -r tmp\winupdl_15814_tmp_xml.transform | sed -e "s/\t*//g" -e "/^$/d" | sed -ne "/\.[Ee][Xx][Ee]/p" 1>tmp\winupdl_15814_tmp_DLPaths

location ID is null. thus it selects all location URLS from mssecure.xml.

If you change the WINUPDL_Product variable to WINUPDL_Product=^^Windows XP Professional.*

it creates:

winupdl_7393_tmp_ProductIDs with this entrie:

183 (Windows XP Professional)

which runs through without the error, but only d/ls 1 patch..

Any ideas>?

Edited by dshadow1
Link to comment
Share on other sites

dshadow1, THANKS !!!

I don't know if you know how much you've just helped me to find this pesky little bug !!!

Haha, so simple! You see, I have some things tweaked in cmd interpreter settings so I just take them for granted :lol:

See the line of output you quoted with the sggrep command from step 4? I take it it's the output when you turn the echo on. See the part where it says !WINUPDL_ProductIDs! ? Well, that should actually be expanded to the numbers separated with '|'. What that means is that the delayed expansion is not on. I have it on all the time via registry that's why I couldn't reproduce that.

I'm working on a bigger update at the minute, to include the separate config files, etc, but I'll patch that tomorrow and release it.

If you want to check in the meantime there's a super quick fix: instead of starting the prog by dbl clicking or typing winupdl, type:

cmd /v:on /c winupdl.cmd

Anyway, next release will contain some more error checking to avoid things like that :P

:D

Link to comment
Share on other sites

I'm really happy you found this; I'm really impatient to play with your script. :)

Hehe, glad to here that. Hopefully I'll have some time this week to implement the config files and make the script more robust. The next thing I'll be looking at is simultaneous downloads :D

I'll post a fix for that there 2mrw B)

Link to comment
Share on other sites

sggrep -r "BulletinDatastore/Locations/Location[ LocationID = '^(559|968|976|983|988|996|1006|1008|329|

1016|1019|1023|1030|1032|1035|1040|1043|1049|1066|1068|1071|1086|1092|1136|1138|1141|1158|1161|1165|

1168|1171|1173|1219|122

1|1257|1260|1263|1273|1274|1276|1278|1295|1297|1300|1313|1317|1323|1330|1340|1343|1347|1350|1400|140

7|1411|1414)' ]" -- mssecure.xml | sgmltrans -r tmp\winupdl_30045_tmp_xml.transform | sed -e "s/\t*//g" -e "/^$/d" | sed -ne "/\.[Ee][Xx][Ee]/p" 1>tmp\winupdl_30045_tmp_DLPaths

arrgh thats better :thumbup , I thought that the query was wrong somehow but now i see it was so simple.

Keep going tzeentch your script is really useful!

Edited by dshadow1
Link to comment
Share on other sites

Seems to be OK now. :)

ATM I have 13 updates and all are for XP.

I'll check if XP SP1 works as good.

Keep up. ;)

:w00t:

edit : 16 17 updates ok.

edit2: 28 OK.

And could you display how many updates have to be downloaded ? (I know SP2 needs around 60 but it would be better I think)

54 updates, all for XP. :)

Edited by Camarade_Tux
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...