Tuesday, June 24, 2008

Install Mac Office 2008 updates to a data volume

The Office 2008 installer package was shipped with an intentional deficiency–the ability to install to other volumes than a system volume, and furthermore a system that supported the minimum OS requirements of Office 2008–to work around problems with the OS installer. Those problems only existed on certain versions of Tiger and they were fixed before Office was shipped, but not until after minimum OS version support was announced.

The unfortunate problem is that, even though the problem existed on a particular version of the OS, the installer logic denies you the ability to install when you’re on a version of the OS that doesn’t have the problem, which includes 10.4.11 and 10.5.x. This could be handled by logic in the .dist file hiding in the updater package, but to date (including the 12.1.1 update), is not.

Here are some instructions that I have successfully used1 to get Office updates to install to my data volume, which is where I moved it immediately after installing it:
  1. After auto-update runs the installer, OK the dialog asking if it can run a script.

  2. Command-Click on the title bar of the installer and choose the folder containing the Installer package, usually named “Temporary Items”. This should reveal it in the Finder.

  3. Copy the installer package to the Desktop using Option-drag. This is so we can edit the copy and have it in a known, long-term location.

  4. Quit the Installer, since the stock package won’t install.

  5. Right click the package on the Desktop, and choose “Show Package Contents”.

  6. Double click the Contents folder.

  7. Open distribution.dist in your favorite text editor.

  8. Replace the body of volumeOs1049OrHigherTest with return true;

  9. Save the file; it’s read-only by default, so you’ll have to force it.

  10. Double click the installer package on the Desktop and install it as normal.
One might imagine that if there were a particular problem with the installer in 10.4.9, that one could rewrite the check s.t. the volume check succeeds if (!systemIs1049() || volumeOs1049OrHigher()) && volumeHasUpdatableVersion() and still get the limited behavior where it causes problems with the system, and the unlimited behavior where it does not.
--
1YMMV. Void where prohibited. These are not official Microsoft instructions; I’m acting as merely another customer of Microsoft using publicly available knowledge about .dist files.

7 comments:

Larry said...

OK when you advise to replace "body" with return true;
could you present me with an example? or do I just erase the entire chunk in the ( ) area and replace with return true; ?

Thanks in advance - Larry

Nathan Herring said...

By body, I mean the text between the two braces "{" and "}" that follows "function volumeOs1049OrHigherTest()". e.g.,

function volumeOs1049OrHigherTest() { return true; }

Anonymous said...

How does one "force save" a read only file?

Cheers

Nathan Herring said...

"Force saving" depends on what you're using as an editor. BBEdit / TextWrangler (free), it will simply prompt you whether you want to override the lock. You can probably just edit the permissions on that file using Finder / File / Get Info and changing the sharing and permissions so that it is writable, and then you should be able to save it with whatever editor.

Anonymous said...

Thanks Larry. I am doing an upgrade on multiple computers. This saves me 20 minutes of download time.

xueli said...

Hi,

I followed all the instructions, and saved the .dist file but the icon becomes a text file icon (although the extension is still .dist).

I tried to run the installer package after saving the .dist file but it came back as "java script error".

Any help?

Thanks.

Nathan Herring said...

I'm not exactly sure what is going on for you. If your text editor added a hidden extension (e.g., it's now ".dist.txt") then that'd be a problem. The installer itself lets you view the installer log (Cmd-L or Window / Installer Log), and you can choose several levels of diagnostics. Perhaps the JavaScript error will be listed more verbosely there?