Microsoft: I fixed the XPS Essentials Pack for you. It took 10 minutes.

15 Sep
2008
16 Comments

For the impatient, download my transform file and execute msiexec /i <msi> TRANSFORMS=<transform>.

There are only a few things that come close to being as extremely frustrating as receiving a Microsoft XML Paper Specification (XPS) document and not being able to open it. Sure, double-click it you say. Interesting, Mozilla Firefox wants to open it with the XPS viewer, okay. Oh look, I’m stuck in a loop and the number of tabs are increasing… Let’s force Internet Explorer to open it… oh, it’s just hanging… Sigh.

To avoid the awful ActiveX XPS control/viewer that’s baked in with the .NET Framework (3.0+), I tried to install the XPS Essentials Pack, which includes (thank God) a standalone viewer. I answered the installer’s questions and let it churn for a bit. Nearing completion, I was presented with an unavoidable error. Figures.

 

Following Microsoft Installer debugging protocol, I re-ran setup passing the /l*v install.log switches and argument to dump everything it’s doing to a flat file. Grep’ing out all the properties and such, I found these lines:

Action 16:56:17: WICUpdateInstallAction.
Action start 16:56:17: WICUpdateInstallAction.
Action ended 16:57:09: ExecuteAction. Return value 3.
Action 16:57:09: FatalErrorForm.
Action start 16:57:09: FatalErrorForm.
Action 16:57:09: FatalErrorForm. Dialog created
Action ended 16:57:10: FatalErrorForm. Return value 1.
Action ended 16:57:10: INSTALL. Return value 3.

The above snippet is pretty self-explanatory. A custom action named WICUpdateInstallAction is being executed and is returning a value of 3. One can safely assume this is bad, due to the next action FatalErrorForm being called.

Looking at the Custom Action table within the MSI (with a tool like SuperOrca), I noticed WICUpdateInstallAction executes a binary labeled WICUPDATE. I dug it out of the Binary table and ran it manually to see what’s going on.

 

Invoking wicupdate.exe manually resulted in the display of familiar hotfix dialogs, but I was greeted by the following error message:

 

It appears the Microsoft XPS team bundled a hotfix with their installer that is executed unconditionally, but throws an error if it’s already installed. I fired up Orca, created a new transform slate, then dropped the row in the InstallExecuteSequence table, which lists the actions, and their associated sequence, performed during install. This will skip the installation attempt of an update we don’t need and suppress the error. (I could have patched the MSI directly, but I wouldn’t have been able to legally distribute the fix. It’s copyrighted content, after all)

To start the installation with my new transformation logic, I executed msiexec /i <msi filename> TRANSFORMS=<transform filename> and setup completed without a hitch. I opened the XPS document I received, printed it, and went on my way.

What has me confused worried is that the Microsoft XPS team has yet to provide an official fix to what is a laughably trivial problem. Paul Thurrott was quick to defend Microsoft in our conversation, however, saying “… yeah but you probably didn’t regression test [the fix] against Swahili Windows…”.

We’ll see what happens. It’s been almost a month; it took me 10 minutes to fix.

16 Comments

ak

Clearly, if you run the msi normally first, and if it fails, use the transform, no bad things will happen. Paul Thurrott is clueless when it comes to the inner workings of windows anyways


James B

Thank you!! Bad enough I’m forced to use Microsoft’s barely-supported format, but to have the team drag their feet on something this trivial is ridiculous! Your fix saved my behind.


Jason

Works great! Thanks for the transform.


Tor

Thanks, man – great work!

Shame on you, MS!


Eric

worked exactly as you said..


Exotic Hadron

“The first rule of a bureaucracy is to protect the bureaucracy”, R. Reagan.
Thurrott is, well, right like he probably never was before…


:P

thanks,
works fine… congrats to u, shame on MS!!!


MR.EVROS

Nice job man.It works fine.Thank You


Fast Support

As usual – a totally dumb answer that does not work. Why don’t you get a job at Microsoft. You would be in excellent company. Your way ONLY sets up the XPS Viewer! That was working fine anyways. The Microsoft XPS Document Writer is NOT installed this way. So essentially, you didn’t fix anything. And did you read your instructions? You must be mad to post such crap as a solution and be proud of it. Rarely have I seen such garbage posted. Total waste of time, as usual. I will fix it myself, as usual. Damn propeller heads!


Rafael

@Fast Support: If you read the previous comments, it works just fine. I checked my XP machines and they all have XPS Document Writers. Sounds like a localized issue.


Bryant

That was clean, Raf. Very well played.


Apollo

I tried to use the following command line:

msiexec /i “C:\Documents and Settings\Apollo\Desktop\XPSEP XP and Server 2003 32 bit.msi” TRANSFORMS=”C:\Documents and Settings\Apollo\Desktop\anti-lazy.mst”

… but the installation program continues giving error.
I am not expert in the subject.
Could you help me please?

Thanks.


Marc

I did it and the process worked perfectly using the command line that I mentioned, but I was forced to uninstall Microsoft.NET Framework 3.0 and then restart the system before installing XPSEP according to your instructions.
Thank you very much.
It was a excelete work on your part!


Uwe

Does not work at all, perhaps because it’s german windows?
I install msxml6SP1_x86.msi , RGB9RAST_x86.msi (29. Juli 2008), wic_x86_deu.exe(6.1.22.4)
than “XPSEP XP and Server 2003 32 bit.msi”


Manfred

There are also 2 more problems, when you install XPS Essential Pack:

1. The Uninstall Folder ist installed on C:\$NtUninstallXPSEP$. This is because there is an other bug in the Msi. There is a property ‘WindowsDir’, that leds to nothing. You have to change ‘WindowsDir’ to ‘WindowsFolder’ in the Directory table (2 pieces). Then the Uninstall Folder will be placed correctly in the windows folder as other hotfix uninstall directories. But it took me more then 10 minutes to find this out (((-;

2. There are 2 temporary folders left on Drive C after installing XPS.
I think there is another problem with a wrong property. Normally theses temporary folders should be generated in the %temp% folder, but I didn’t find the reason for this, I’m not an Msi Expert …


Manfred

Again me …

Found the reason for the problem of leaving the temporary folders (my point 2).
Looking at the custom actions SCUpdateInstallAction, SCLPUpdateInstallAction, EPUpdateInstallAction, WICUpdateInstallAction showed, that they are processed synchronous.
Changing processing to “asynch, wait for” gives the custom action enough time to remove its temporary folder, when done.

Maybe I could post extended instructions …