A colleague of mine was working on a interesting case the other day installing SP3 for Exchange 2007 and I found this worthy of setting aside some time to blog about this.
When they trying to complete the install it was failing and reporting the following error information to the setup log (product code removed and replaced with xxxx).
[12/15/2010 10:08:24 AM]  Beginning processing.
[12/15/2010 10:08:24 AM]  Property ‘PackageName’ is ‘EXCHANGESERVER.msi’.
[12/15/2010 10:08:24 AM]  Removing MSI package with code ‘xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx’.
[12/15/2010 10:08:25 AM]  [ERROR] Unexpected Error
[12/15/2010 10:08:25 AM]  [ERROR] Unable to remove product with code xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx. This patch package could not be opened. Verify that the patch package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer patch package. Error code is 1635.
[12/15/2010 10:08:25 AM]  [ERROR] This patch package could not be opened. Verify that the patch package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer patch package
[12/15/2010 10:08:25 AM]  Ending processing.
[12/15/2010 10:08:25 AM]  The Exchange Server Setup operation did not complete. For more information, visit http://support.microsoft.com and enter the Error ID.
[12/15/2010 10:08:25 AM]  End of Setup
[12/15/2010 10:08:25 AM]  **********************************************
Interestingly enough as they were running low on the root drive (c:\), the customer had a consultant come onsite and to clear up space. They decided to move the installer directory from the C:\ drive to the D:\ drive. This is the directory used when a program is installed on the server. The installer directory on D:\ was too large to move back to the C:\ as it exceeds the available free space on C:\. The kicker is, once this is done now you are unable to add or remove “ANYTHING” that has been installed on this server.
The way around this issue:
Sysinternals (Microsoft) has a program called “Junction”, this application allows for the creation of a “Directory Symbolic Links”. What is a Directory Symbolic Link you ask? This is a link pointer that allows you to point to one directory when really its destination or target is to another directory. Directory symbolic links are known as NTFS junctions in Windows. Unfortunately, Windows does not come with a tool for creating these junctions. However, if you have purchased the Win2K or above Resource Kit, it has a program called “Linkd” for creating junctions as well.
If the directory C:\Windows\Installer\ specified the directory D:\Windows\Installer\ as its target, then an application accessing C:\Windows\Installer\ would actually be accessing D:\Windows\Installer\ directory. Thus fooling the system into thinking all the data it needs is in the original location.
Steps to make the junction:
1. Move the directory with all contents from the drive you are experiencing space depletion on to a drive with adequate space.
Junction will not create the link if the source directory exists, it must be move to the target location before creating the link. Reason: On creation of the link “Junction” builds a source to target link in the source location. The screen shot of my test below shows the source directory has been moved. The next screen shot shows the source link after creation.
2. Download Junction from http://technet.microsoft.com/en-us/sysinternals/bb896768
3. Run the following command from the original parent directory:
Junction C:\Windows\Installer D:\Windows\Installer
4. Test that it is working by simply saving a file (notepad is what I used) to the C:\Windows\Installer and then check the D:\Windows\Installer directory to make sure your file was redirected.
Below is a test through command prompt:
Below is a visual on the source link after creation:
You do not want to make a general practice of moving vital directories from your root drive. However, if you must then I highly recommend the above method for creating the NFTS Junctions for the original locations.
How to create and manipulate NTFS junction points
Thanks to Jeremiah Waldon and Richard Roddy for their initial foot work on this issue and leading into this great workaround for Directory Symbolic Links!