The WiX toolset presents the Creative Commons Add-in for Microsoft Office.


Creative Commons Add-in for Microsoft OfficeI have been working on a few unrelated side-projects over the last several months. These are projects that I find interesting and typically relate to software installation in some way. Today Microsoft released the first of these projects, the Creative Commons Add-in for Microsoft Office.

Essentially, the Creative Commons Add-in for Microsoft Office is a small piece of code that adds a "Creative Commons" item to the File menu in Word, Excel, and PowerPoint. The "Creative Commons" menu item brings up a dialog that allows the use to choose a Creative Commons license for their document. The cool part is that the license is fetched from the Creative Commons web site via a web service exposed by Creative Commons. This web services allows the add-in to stay current with licenses should they change.

You can read a bit about the add-in in the news here and here.

But what does this have to do with software installation?

Well, that’s the interesting part of the story. You see when it came time to deliver the Creative Commons Add-in for Microsoft Office, there were some installation hurdles. First, the add-in is managed code that integrates with both Office XP and Office 2003. To integrate with Office via managed code you need the Office Primary Interop Assemblies (PIAs). To make things even more complicated there are PIAs for Office XP and PIAs for Office 2003. This means we need a boostrapper/chainer to handle the multiple MSI packages.

Second, it turns out that the Office XP PIAs were released as a collection of DLLs and .reg files with a register.bat that called gacutil.exe and regedit to register the files (there is no uninstall). This offended my setup sensibility on so many levels that I am still struck with awe that Microsoft released that as the solution for managed code interop with Office XP. Obviously, there was going to be work to do here.

Third, the original MSI package for the Creative Commons Add-in for Microsoft Office was created via Visual Studio. Anyone who knows me well knows how much frustration the Visual Studio setup projects (VSI) cause me. VSI creates truly ugly MSI packages, adds all kinds of junk to it and doesn’t do some basic things correctly. In this particular case, the SelfReg table was being used to write several registry keys. The MSI SDK documentation explicitly calls out that you should not use SelfReg, yet here it was.

Anyway, back to the story. Martha Nalebuff is the mastermind behind the whole project. When she hit all of these problems she was at a loss for what to do. Fortunately, she ran into Jason Matusow who, after listening to the problems, pointed Martha at me. Martha had a meeting with several of us that work on the WiX toolset at night and we assured her this was something we could help with.

I was already working on a bootstrapper for ClickThrough and knew that adding the necessary chainer features wouldn’t take much work. Bob Arnson picked up the Office XP PIA travesty and converted it into an MSI package (I’ll talk about this in the future). Reid Gustin put together the pieces we needed that turned into the CloseApplications CustomAction in WiX toolset (turned out we had to shutdown the Office applications when installing the add-in). Finally, I took apart the VSI generated MSI package and created a much cleaner .wxs file for it.

The end result is the ccsetup.exe that you can now download for free from Microsoft.

Personally, I participated in this project for three reasons. First and foremost, I believed in the project and wanted to see it succeed. Enabling "creators of all types" to share their works as they see fit is a noble goal. Second, I wanted to learn more about how to install Office add-ins. I believe that there is no better way to learn than by doing. Finally, I wanted to be a part of something that would ship quickly. It is all too easy to become very disconnected from the real world while working heads down on multi-year projects.

Over the next month or so I’ll be telling the story about the development of each of the pieces of the Creative Commons Add-in for Microsoft Office. I’ll share what I learned along the way and what I plan to do with this information going forward. Stay tuned. Some real world software installation experiences will be coming this way soon.

Comments (17)

  1. Leon Zandman says:

    Interesting… Will you also publish the full source code for the project?

  2. Where is the documentation for this bootstrapper?  The instructions only say to double click the file.  ccsetup.exe doesn’t  yield any information to a /? command.  

    Systems Administrators need a way to extract the contents and run these installations silently and suppress reboots so that SMS can decide to do a reboot and manage the source resilency from distribution points.

  3. Leon, the focus thus far has been on getting this first release (Martha calls it a 0.9) out to the public.  I will be discussing the internals of the setup on my blog and you will see the reusable parts of the install (like the Office detection logic, but not the graphics) being added to the WiX toolset over the next month or so.

  4. Chris, patience.  Not everything was rolled into this very first release.  Don’t worry, all of the information necessary to do the enterprise wide deployments of this add-in is still in there.  The ccsetup.exe itself doesn’t support the scenario by itself.

    I’ll be discussing this in time as well.

  5. Am I missing something?  I’m looking at the PIA MSI and while I see an Appsearch called DetectOffice10 which uses a CompLocator search to find the Office InstallDir, the property it populates ( OFFICE10INSTALLED ) isn’t used other then the LaunchCondition table.

    The directory table entry "OfficeFolder" seems to be hard wired to Program FilesMicrosoft OfficeOffice10.  

    Will this work if Office has been installed somewhere else?

  6. Chris, all of the PIA files are installed to the GAC.  The directory the Components/Files go to doesn’t really matter.

    The DetectOffice10 CompLocator is used purely to determine if Office XP is installed on the machine at all.  Arguably, INSTALLLOCATION should be set to OFFICE10INSTALLED but it doesn’t really matter.

  7. Frederik says:

    Weird… It installed the Office XP PIA’s, while I don’t have that installed on my computer. Shortly after, it started with the Office 2003 PIA’s.

    Anyway, I’m looking forward to your future postings, since I’m (howevery only remotely) trying to target both Office XP and 2003.

    It’s good to see the bootstrapper is working, now if only you could update the ClickThrough .wxs file so that we can generate bootstrappers as well 😉

    Anyway, WiX is gainging a lot in added functionality lately which is a really cool thing (think Wix 3.0 shaping up, NGen support, WixUI,…)!

  8. Got it… didn’t notice the assembly part of it.   For the sake of argument, I would `fix` that as you said before some junior setup developer comes by and decides to use that directory table entry for something that doesn’t go to the GAC. 🙂

    BTW it’s a shame that ccsetup.exe doesn’t support silent installs ( Windows Installer Team Rule #34 violation )  or even a simple extraction like the ohotfix patch structure does.

    For example I noticed that ccsetup.exe is caching the MSI files, but it’s doing it underneath the profile of the user who installed it.   That’s not going to be very good for resilency…. why not do the LSI location that office uses?  This is a Windows Installer Team Rule #31 violation.

    BTW users of SMS2003 should be aware of how the SMS Advanced Client can manage the relationship between MSI package source and the distribution points that serves the client.   This is a good reason in itself to keep the contents exposed and not trapped inside of an exe.

  9. Frederik, it’s all under development.  I’m currently juggling a number of projects related to WiX plus a full work load at work.  There are only so many hours in the day.  I’m just glad we were able to squeak this one out successfully.

  10. Chris, as I said above, patience.  The WiX bootstrapper (the foundation for ccsetup.exe) will eventually support all those things.  There was only so much time I had to put towards this project.  It’s amazing I got the EULA right.

    Corporate installs (which drive all the features you bring up) were not the target audience of this release.  Go skim the blogs out there.  So far, I’ve seen a lot of positive feedback about the concept and no complaints about the installation experience (although it is hard to tell just how many people have actually tried the install).  Individual users who create content (like bloggers) were the focus for this release of the Creative Commons Add-in for Microsoft Office.  We’ll get the corporate install scenarios into the WiX bootstrapper later.

    The caching thing is a bug that I’ll explain later.

  11. Adam says:

    Interesting. Does using this plugin also change the file format for the document being edited so that the content, which is obviously meant to be editable by as many people as possible, can *actually* be edited without loss of fidelity on systems other than MS Office?

    It would seem kind of ironic to save CC-licensed material in a proprietary file format that, in order to get up-to-date documentation for, you need to sign an NDA!

  12. Adam, AFAIK, add-ins cannot change the file format of the document.  They just add more data to the document.  The user gets to pick what format to save the document as, including HTML if he or she desires.

  13. Imagine a blog entry where I talk about the issues we’ve hit in the initial release of the Creative Commons Add-in for Microsoft Office.

  14. Joey Barkley says:

    Rob, I know you said that later on you would be releasing some of this code to the community. Can you tell us if the Office XP PIA install will be redistributable with commercial packages (for instance, when released could a company package it for installation with the VS.NET 2005 Bootstrap as a prereq to a commercial product), or will licensing prohibit commercial redistribution?

    Thanks.

  15. Now that Bill Gates has announced plans to work less at Microsoft after two years, blogs around the world are jumping onto the wagon to announce how Microsoft is going to change and how Microsoft…

  16. This isn’t really install related but I’m wondering why the decision to write a managed plugin for an unmanaged application was made in the first place.

    All the PIA issues would have been eliminated, a bootstrapper wouldn’t even have been needed and the install could be a really simple MSI project that could easily support a standard unattended silent installation by GPO/SMS.

    No application should EVER be deployed without supporting this scenario.  However I am pleased when development shops continue to violate this basic requirement as it keeps me gainfully employed.

  17. Imagine a blog entry where Bob Arnson steps in and tells the tale of the Office PIAs for the Creative Commons Add-in for Microsoft Office.