Howto Extract all Files from Microsoft Installer Files (msi) rather than to Install the Package

All you need is the Windows Installer itself. Hit Win+R (command line dialog) and execute the following line (change file name and target folder, of course):

msiexec /a c:\tmp\MSIFileName.msi /qb TARGETDIR="c:\tmp\msitmp\"

You’ll find all files in your target folder.

How to Build a Windows XP SP3 Integrated Installation CD

You need:

  1. Old/original Windows XP installation CD (any of SP0 to SP2 will do even though only those from SP2 are supported officially). Make sure to use build 5512 or above.
  2. Microsoft Windows SP3
  3. unzipper like WinRar, unrar for  Linux / Ubuntu or the like
  4. ISO creator / CD burn program like mkisofs, InfraRecorder, UltraISO, Basero (or others) or even old school
  5. Boot image exctracted using BBIE or use this (also see box below)
  6. ~ 1 GB free tmp space on disk

You do:

  1. Extract / copy old Windows CD‘s content (including hidden files!) to one folder (e.g. c:\XPCD)
  2. extract SP3‘s content to another folder (e.g. c:\XPSP3) using e.g. unrar, winrar or hit Win+R and type
    c:\XPSP3\windowsxp-kb936929-sp3-x86-enu.exe –x

    and select target folder, here c:\XPSP3

  3. To slipstream the old CD do Win+R and copy+paste or type
    c:\XPSP3\i386\update\update.exe /integrate:c:\XPCD
  4. Create bootable CD image or CD using the boot image and your updated folder c:\XPCD. I recommend using mkisofs (Windows or Linux executable) using
    mkisofs \
        -b cdboot/msboot.img -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 \
        -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames \
        -V "WINSP" \
        -o ../winsp.iso .

    from within the root folder of the CD to be, i.e. c:\XPCD. You need to extract the El Torito image first. Create a new folder there and drop your boot image, i.e. cdboot/msboot.img. This can be done under Linux for example using geteltorito /dev/scd0 > cdboot/msboot.img (or use BBIE or IsoBuster in Windows or Wine).

  5. Done.

You might want to try booting from the image using VirtualBox.


/dev/scd0 > {in-dir}/boot.bin

Resizing Digital Pictures Made Easy

One might think it’s not that much of a task to resize a bunch of files in one directory so a certain dimention. Say you want to have all jpg images in your directory have width 1024 with aspect ratio maintained. For one image using GIMP actually this is easy. Just open it, go to image > scale image and type “1024” for width. That’s it. Knowing of GIMP’s batch mode feature I though: Well, now let’s just do this very same thing in batch mode for multiple files. Googling I found this passage Adrian Likins GIMP Batch How-To:

Batch mode is slow. Its not really a practical replacement for tools like ImageMagick or NetPBM when it comes to large scale image conversions or similar. At least not without writing some very clever scripts.
The problem with this approach is that gimp/script-fu has no built in procedures to iiterate though a list of images. So you cant easily tell gimp to load up *.jpg and run predator.scm on them, at least not without it taking a _long_ time.

There’s the solution, I thought. So I installed ImageMagick for Windows and made myself ready to run a Windows batch for loop on the files. After double checking against ImageMagick’s delivered help for convert I knew the syntax:

convert  -resize 1024

So far so good. But now comes the Windows batch bit. Even though fairly powerfull even compared with bash or other mighty script languages on Linux I couldn’t figure out how to run more than one command per iteration step. This is what I came around to, which does what intended, but without a pretty notice to the user that could have been done with adding something like ; @echo %i

for /f %i in ('dir /b *.jpg') do convert %i -resize 50% %i

Note that I chose to halve the pics rather than to hard-set the width so I don’t risk upright pictures to become bigger in file size than the original. There you go!

Update: I finally came around to do it with Linux. Here is the Bash equivalent to the above (plus an additional nice notification which is easy with Bash):

for i in *.jpg; do echo "converting \"$i\"..."; convert "$i" -resize 50% "$i"; done