Many thanks to Curtis Sawin, a Senior Consultant with Microsoft Consulting Services, for providing this content for the Office Resource Kit Blog.

Recently, while performing deployment testing of Microsoft Office 2010 for a customer, we ran into a specific issue while upgrading Office 2003 to Office 2010.  Specifically, Office 2010 setup may fail when upgrading from Office 2003 if the Office 2003 Local Installation Source (LIS) is corrupt.  Further, it’s possible to install Office 2003 in such a manner that Office 2010 will detect a corrupt LIS, when, in fact, the source has been deleted.  We discovered that Office 2010 responds differently to an Office 2003 installation when a LIS is not created, compared with a LIS that is created and then deleted.

This blog post describes the issue and provides a workaround.

Office 2003 and the Local Installation Source (LIS)

Beginning with Office 2003, Setup.exe creates a LIS as an optional component during installation.  Typically, the LIS is installed into the “C:\MSOCache” folder.  The goal of the LIS is to ensure that any requirements for the original installation source do not result in a prompt to the user.  The original installation source may be required if an end-user repairs Office 2003, adds a new feature, or applies a hotfix (i.e., a patch).  If the original installation source is not available, the end-user will be prompted to find a source location where the Office 2003 setup files can be found.  If the end-user does not know the location of the source, the desired action (e.g., repair, feature addition or hotfix installation) will fail. 

At the end of the Office 2003 installation, you are prompted to Delete installation files (see image below).  If this check box is selected, when you select the Finish button, the setup files are removed from the LIS.  (Side note:  This check-box is not selected by default).

It’s also important to note that to install Office 2003, you can also run the MSI directly (e.g., std11.msi or pro11.msi) instead of running Setup.exe.  Using the MSI to install Office 2003 is fully supported and allows customers to use Group Policy to deploy Office 2003.

If the MSI is used rather than Setup.exe, then a LIS is not created when installing Office 2003. 

Office 2010 Setup and the Office 2003 LIS

Office 2010 setup detects for previous versions.  Specifically, Office 2010 checks for Office XP, Office 2003, and Office 2007.  When checking for Office 2003, setup checks for an Office 2003 LIS and validates that it’s intact.  If the Office 2003 LIS has been altered, Office 2010 will display the following message and the installation will stop.

 Additionally, the following will be written to the installation log file:

Catalyst Office 2003 Cache Integrity check.  Corrupt cache found.
Return Code: 30066.  Exception Caught: PreReqCheckFailure

In short: If the Office 2003 LIS has been altered or corrupted, Office 2010 setup will fail.

Additionally, it should be noted that if you select Delete Installation Files at the end of Office 2003 setup, Office 2010 setup will detect this as a corrupt cache.  This is very important to note, so I’ll say it louder: 

It is possible to install Office 2003 in a (supported) manner which will cause Office 2010 setup to fail.

This situation is exacerbated in that Office 2003 may have been installed years ago.  Thus, IT admins may not be aware of how Office 2003 was installed when they are preparing to install Office 2010.   Thus, detecting and handling this situation becomes critical to ensuring a smooth upgrade to Office 2010.

That’s the bad news.  The good news is the following:

- Only specific, limited subset of Office 2003 installations are subject to this issue.
- You can use an Office 2003 Resource Kit tool to prevent this issue from causing problems.

Office 2003 Installations Affected

As stated earlier, there are two ways to install Office 2003: Using setup.exe or using the MSI directly.  If you install Office 2003 using the MSI directly, the LIS is not created.  Thus, Office 2010 setup will not perform this “cache integrity check.  Meaning, Office 2003 installations installed via the MSI directly are not subject to this issue.

Further, the Delete Installation Files check box is not selected by default. Thus, if you were to install Office 2003 silently, or with a basic (progress-bar only) interface, the LIS would not be deleted at the end of the installation.  This is a configurable setting, however.  If you set the property PURGE=1 during Office 2003 setup then the cache will be deleted upon the completion of setup.  Thus, you must either take specific action during installation (i.e., clicking the check-box), or purposefully configure the Office 2003 installation to purge its LIS in order to get into this situation.

Thus, it would be extremely rare to find that Office 2003 has been installed in this manner, so that Office 2010 cannot be installed.  In short, this problem only exists if the following are true:

- Office 2003 has been installed using setup.exe, and

- The Delete Installation Files check-box was selected during Office 2003 setup, or
- The PURGE property was set to “1” during Office 2003 setup.

Workaround: Correcting The Issue using LISTOOL.exe

We found that when Office 2003 is installed without a LIS via the MSI installation method, Office 2010 setup upgrades successfully.   Further, even though there is no Office 2003 LIS, because it wasn’t created in the first place, the original Office 2003 source is not needed when Office 2010 is installing.  Office 2010 will successfully uninstall Office 2003 using the cached MSI file (in “c:\windows\installer)”.

We also found that removing the “C:\MSOCache” folder does not correct this issue.  Meaning, if you install Office 2003 with a LIS, Office 2010 setup will detect this, even if the LIS no longer exists, and the Office 2010 installation fails.  In short, Office 2010 setup makes a distinction between an Office 2003 installation with a removed LIS and an Office 2003 installation without a LIS ever created.

However, you can use LISTOOL.exe, from the Office 2003 Resource Kit to either regenerate the LIS, or delete the LIS safely.  To delete the LIS, you can run:

LISTOOL.exe remove=all

This will delete the LIS, and allow Office 2010 setup to succeed.  The above command typically takes less than 5 seconds to complete, and can be run silently, using the “/q” command-line switch.

The command-line switches for LISTOOL.exe can be found in the screen shot below.  These can also be found by running

LISTOOL.exe /?

Running LISTOOL.exe before Office 2010 Setup

Now that we know we can mitigate this issue using LISTOOL.exe, it would be more helpful to perform this step immediately before Office 2010 setup is run…but only on computers where Office 2003 is currently installed.

This can be facilitated by creating a script/program that:
- Checks for any Office 2003 product,
- removes the Office 2003 LIS,
- then installs Office 2010. 

Such a script must be run prior to calling Office 2010 setup.  It cannot be called by leveraging Add Installations and Run Programs in the Office Customization Tool (OCT) to run a program before Office is installed.  Nor can you use the Command element in the Config.xml to run a program before Office 2010 is installed.  Such programs are run after the cache integrity check is performed.

In order to check for any Office 2003 product, you can use the Windows Installer automation interface to enumerate through all MSI products on a machine to find any Office 2003 product.   When you enumerates through all MSI products, the ProductCode for each product is returned.  Thus, in order to detect Office 2003, you must know the ProductCode for the Office 2003 SKU (i.e., Standard, Professional, etc.).

Fortunately, the ProductCode algorithm for all Office products is publicly available.  Support article 823672: Description of numbering scheme for product code GUIDs in Office 2003 can be used as a guide.  For instance, the last 28 characters of the ProductCode for any Office 2003 product is “6000-11D3-8CFE-0150048383C9}.”  You can then detect for this string when enumerating all products, and run LISTOOL.exe if a matching product is found.

Below is a sample VBScript that demonstrates this:

'     Sample script to check for Office 2003.
'     The script will launch LISTOOL.EXE to remove the Office 2003 LIS for any Office 2003 product
'     Requirements: LISTOOL.EXE and Install.cmd must exist in the same path
'     Notes:  This sample contains no error handling.  It is for demo purposes only.

Option Explicit

Dim oMSI, oProds, oProd
Dim oFSO, oShell, strCommandLine, strofficeCommandline
Dim str2003Guid, intLen2003, intReturn

set oFSO = CreateObject("Scripting.FileSystemObject")
set oShell = CreateObject("WScript.Shell")
set oMSI = CreateObject("WindowsInstaller.Installer")
set oProds = oMSI.Products

str2003Guid = "6000-11D3-8CFE-0150048383C9}"
intLen2003 = len(str2003Guid)

strOfficeCommandline = "install.cmd"
strCommandline = "listool.exe /q remove=all"

'     Check for any office 2000 or 2003 product
for each oProd in oProds
      ' Remove Office 2003 LIS if found
      if right(oProd,intLen2003) = str2003Guid then
            intReturn = oShell.run(strcommandLine,,1)
            exit for
      end if
next

'     Call the Office 2010 installation
IntReturn = oShell.run (strOfficeCommandline,,0)

Summary

Office 2003 presents a unique challenge when upgrading to Office 2010.  Fortunately, the projected scope of affected computers is small, and a targeted mitigation can be used to work around this issue.