Everybody "knows" the WinSXS folder is huge, right?
Maybe not everybody knows that the WinSXS folder was created for good reason -- it puts to sleep that "DLL Hell" problem that has plagued Windows since the beginning, but it also makes servicing easier for Microsoft. You see, whenever a new hotfix or service pack is released, they simply copy all the DLLs to the WinSXS folder. The new DLLs go into uniquely new folders and so all the old DLLs are still right there on the disk. When you want to uninstall the hotfix, they simply "resurrect" the older DLLs from it's old folder.
But that creates a problem. A problem I'm sure anybody who's used Vista for a while has discovered. The WinSXS folder is huge! Mine is 10GB. That's right, 10 gigabytes (Wikipedia would tell me I should say "10 gibibytes, or 10GiB" but that's dumb). I remember when Windows used to come on 12 floppy diskettes... those were the days.
However, the title of this post is "how to free up space in the WinSXS folder" so I'm sure you're all chafing at the bit to find out how you do that... well, here it is. At an administrative command-prompt, run the following command:
C:\> VSP1CLN.EXE
Yep, that's it. On my system, that freed up about 2GB inside the WinSXS folder. 20% is not bad. But what does it do?
Well, as I mentioned, when Windows installs a hotfix or service pack, it simply copies all the new DLLs to new folders in WinSXS and keeps the old ones around. In case you want to uninstall the hotfix/service pack.
Now, Vista SP1 installed a lot of new files. That means there's a lot of old files still hanging around in case you want to uninstall SP1. But you don't want to uninstall it, right? So that's what VSP1CLN.EXE does -- it simply removes all the pre-SP1 files from WinSXS. Essentially making SP1 "permanent".
Pretty neat, huh?