Welcome to MSDN Blogs Sign in | Join | Help

The story of Orca

Like security guy Greg Fee, I find the list of referrers to my blog fascinating. Today the referrers list contained several hits from people searching for Orca (or more explicitly orca.exe) on Google. I can only figure that Google snagged one of my earliest blog entries with its reference to "orca.exe" and was sending people there. Since, I've been in something of a storytelling mood the last couple days I thought I'd go back to 1998 and tell the story of Orca.

In 1998, I was an intern on the Darwin team that was a small part of the Office 9 organization. "Darwin" was the codename for the new installation technology being built to replace the ACME installer. When I showed up on the Microsoft campus, Office 9 was just about to start on the long glide path towards shipping a product.

Early in my internship, I was working on some small tools to make it easier for people to build "MSI files" that were the inputs into Darwin. For example, msifiler.exe was the first tool I wrote. After getting my feet wet with a couple small tools, I was put on a task that would cumulate in the Merge Module specification and tools. However, I never really shook the "tools bug" and kept thinking about tools that would make it easier to deal with Darwin. I liked to call myself the "unofficial Darwin tools team". I even had an internal web site called "Darwin Unleashed!" with all kinds of tips and tricks for building MSI files.

At exactly halfway through my eight month internship, my girlfriend at the time decided she didn't want to continue to be an intern Program Manager (PM) with the Publisher team but wanted to go back to fighting forest fires in Zion National Park as she had the summer before. The day after she left I was sitting in Rob Collie (who was the Darwin PM at the time)'s office listening to Jim Masson (who was a part of the Zero Administration Windows initiative in Microsoft and later would do a stint as the Darwin PM) talk about his "Darwin wish list". At the end of his list, he leaned back in his chair and said, "You know what would be one really cool app? One really cool app for Darwin would be a table editor that we could ship in the SDK."

I had been suggesting to my mentor for a few weeks that I should write a table editor for creating and editing MSI files. At the time the only thing you could do was use msidb.exe to import and export IDT files. Have you ever seen an IDT file? They look a lot like this:

Component <tab> ComponentId <tab> Directory_ <tab> Attributes <tab> Condition <tab> KeyPath
s72 <tab>
S38 <tab> s72 <tab> i2 <tab> S255 <tab> S72
Component <tab>
Component
MyComponent <tab>
{12345678-1234-1234-1234-123456789012} <tab> MyDir <tab> 4 <tab> <tab> foo

To edit your MSI file you had to export a table to an IDT file like above, modify the data that needed changing then import the IDT file back into the MSI. This was a painful process because IDT files have to be formatted just right (for example, I explicitly called out the tabs separating each column identifier) and keeping foreign key relationships up to date often required exporting another IDT file and fixing it. Finally, msidb.exe had one of the most confusing command-line interfaces and one of the funkiest GUI's I've ever had the displeasure of dealing with.

Msidb.exe was so bad that the Office setup team had built a tool called "Scopes". Scopes had the ability to directly view and edit the tables in the MSI so you didn't have to dump them all to text. Unfortunately, it had all kinds of features for interacting with the very complicated build process for Office 9 and wasn't terribly stable. Scopes wasn't a tool that Microsoft would be able to ship customers in an SDK.

So, when my social life up and left for Utah, I decided to hone my MFC skills and try to bang out a real live table editor in my new found free time. Three mostly sleepless nights later I had a basic table editor working. I showed it to my mentor and he said, "Can it do Unicode?" After weeks of trying to convince him that we needed this tool, the first thing he ask for is another feature. My answer was, "Sure, how hard could it be?"

Orca turned into one of his favourite (ahh, the dreaded "u" again) demos to show to people interested in Darwin. He would load an MSI file with a table that contained four rows with the same sentence each displayed in a different language. Yeah, John, it can do Unicode. <smile/>

Now after you get to know me better, you'll find that I have this fascination with the stories behind the naming of people and things. For example, when I was older I found out that each of my parents and my grandfather had a different story why my name is "Rob" (just "Rob"). So it is very important for all of my projects to have codenames that fit them well. Orca's name is one of my favourites (still with the "u", grr).

To understand the name, you have to go back to the beginning with the conversation in Rob Collie's office. Two or three times in that conversation Jim said, "One really cool app." His little diatribe got stuck in my head and on the third night of sleep deprived coding the name for the table editor came to me. Orca. One really cool app. How perfect was that? So, I started up mspaint.exe and hacked out a little pixel art that turned into the killer whale leaping out of the water that you'll still find today as the logo for orca.exe (click Help -> About for a really good picture).

Later it dawned on me that the icon for the Scopes table editor was a little penguin. Do you know what one of the few natural predators of penguins are? Yeah, killer whales. The Scopes tool was mothballed when Office 9 shipped (marketing named it Office 2000). Scopes was then replaced by a new setup processes in Office 10.

So there's the story of "one really cool app" that came to be known as Orca. I hope you enjoyed a bit of the history behind the tools. Next blog entry, I think I'll go back and continue that discussion about Components where I left off. Until next time.
Published Saturday, October 11, 2003 2:30 AM by robmen
Filed under: ,

Comments

# RE: The story of Orca

Saturday, October 11, 2003 4:28 AM by Siew Moi Khor
ok, since you said "...you'll find that I have this fascination with the stories behind the naming of people and things." My Chinese name has a story too. I was born on winter solstice http://www.verilux.net/winter_soltice.htm My father decided to name me Winter Blossom http://www.icc1.org.uk/pages/Winter%20Blossom.htm because the conditions under which winter blossoms have to live are seen as pretty tough. Also among other things, it was said that the colder the winter the more amazing, beautiful and fragrant the blooms will be. You see, I was born into a really poor family and I was supposed to be given away, to secure maybe a better future. But my father couldn't do it. My dad thought very carefully when he named me. Among other things, my dad hoped that i would grow up strong, tough, resilient...and that I would thrive in the face of adversity. That was how i came to have my name. Needless to say, my dad and I were very close until the very end.

# RE: The story of Orca

Saturday, October 11, 2003 2:55 PM by Rob Mensching
Wow. I'm at a loss for words. Wow, Siew Moi. Thank you for sharing that.

# RE: The story of Orca

Tuesday, October 14, 2003 11:34 AM by Scott Galloway
Wonder if they were searching for "Orcas" V.Next.Next Visual Studio?

# RE: The story of Orca

Wednesday, October 15, 2003 12:10 AM by Peter Provost
I was one of those who searched for orca.exe in the last week. But what I was really looking for was anything about ObjectSpaces. I found a page [1] that seemed to have what I was looking for, but alas everything has been pulled. I guess I have to wait... :) [1] http://my.execpc.com/~gopalan/dotnet/object_spaces/installing_os.html

# RE: The story of Orca

Friday, October 17, 2003 2:32 PM by Jim Geurts
Perhaps I'm missing something, but it doesn't appear as though there is a separate contact page. Anyway, I'm curious about how MSI stores table definitions. I thought that it occurred via the _Validation table, but recent events proved me wrong. I wrote most of the functionality for the msi/msm tasks (http://nantcontrib.sf.net) for NAnt and one of the features that I provided was the ability to add "custom tables." In order to add a "custom table," I generate an IDT file and import it into the MSI database. Can you explain how MSI keeps track of table definitions, etc and why there is a _Validation table, if it is not used internally by MSI.

# RE: The story of Orca

Saturday, November 08, 2003 11:55 PM by Robert
Jim, I don't know for sure but perhaps this will help... When was reading the MSI.SDK for MsiDatabaseGetPrimaryKeys (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msidatabasegetprimarykeys.asp) I found this line... This function cannot be used with the _Tables table or the _Columns table. _Tables link: http://msdn.microsoft.com/library/en-us/msi/setup/_tables_table.asp _Column link: http://msdn.microsoft.com/library/en-us/msi/setup/_columns_table.asp Hope that helps, Robert

# RE: The story of Orca

Monday, November 10, 2003 9:31 PM by Glen T
Ya gotta love Google. Search for 'orca.exe' and you end up talking to the author in 2 minutes flat! So, Robert, is there anyway of getting a free-standing version of ORCA that doesn't involve installing the whole SDK? I only want it to debug .msi files generated by InstallShield Express. : ) Best Regards, Glen T.

# RE: The story of Orca

Thursday, November 13, 2003 2:53 PM by Rob Mensching
I don't know if you want Robert or me (Rob, just Rob) but the answer is you can technically get orca.exe running without using the MSI. Before I say how, I need you to do two things: 1. Be sure to go back and read the EULA to ensure sure you don't do anything that violates it (I can't imagine this would). 2. Realize that if this doesn't work or if something changes in the future and this alternative quits working that we (i.e. people that work on tools like Orca) will not necessarily do more work to keep this alternative alive. In other words, you're on unsupported ground. Now, if you're willing to accept that, then to get orca running you just need to copy the orca.exe and the orca.dat file to the same directory. Actually, you can specify the "-s" switch on the command line and put the "orca.dat" file anywhere you want. Note, that validation and merging of modules will not work unless you run setup. Validation and merging is accomplished using COM objects (I'm sorry, that's my fault... maybe I'll blog about that one day) and they require setup to run to get everything configured. However, if you just want a light weight table editor, nothing beats copying orca.exe and orca.dat to a network share and running it from there. I do this *all* the time. <grin/>

# RE: The story of Orca

Monday, November 17, 2003 3:22 PM by Brett
Speaking of Orca, I tried to perform ICE validations like Orca does but using VB6 ( I know, I am lost in an ancient world). I assume that Orca does a msiSetInternalUI to None and a msiSetExternalUI to an inbuilt procedure to capture the output. I tried redirecting the msi messages from the ICEs using msiSetExternalUI but it didn't want to work (using AddressOf ProcName to redirect the UI to my internal proc). So I tried writing to a log file using msiEnableLog, but with InternalUI set to None no warnings or errors are written to the log. Does msiProcessMessage require the UI level to be at least Basic before messages are written to the log (in which case the default UI handler also writes a message dialog to the screen for each message (info, error, warning)). Or is there some other function I need to use with no UI but still be able to capture the ICE messages?

# Inside the MSI file format.

Tuesday, February 10, 2004 4:01 AM by when setup isn't just xcopy
Take a tour of the MSI file format.

# Wix Nixes Orca

Monday, April 05, 2004 11:51 PM by K. Scott Allen's Blog

# Checking in on the Windows Installer XML (WiX) toolset development environments.

Friday, May 14, 2004 2:50 PM by when setup isn't just xcopy
Imagine a blog entry where I go back out to SourceForge and take a peek at all the projects that appear to be building a development environment for the Windows Installer XML toolset.

# Checking in on the Windows Installer XML (WiX) toolset development environments.

Friday, May 14, 2004 3:14 PM by when setup isn't just xcopy
Imagine a blog entry where I go back out to SourceForge and take a peek at all the projects that appear to be building a development environment for the Windows Installer XML toolset.

# re: The story of Orca

Monday, May 31, 2004 1:34 PM by Gordon
What I am interested in is how orca works so quickly and why this information is not available in the SDK?
To use the interface provided, MsiOpenDatabase, MsiDatabaseOpenView and ViewExecute, etc, iterating around getting every record is soo much slower than orca?

# re: The story of Orca

Monday, May 31, 2004 3:33 PM by Rob Mensching
Orca uses those very APIs for all of its work. There are no other APIs to get data out of an MSI file. Orca isn't using any undocumented APIs.

# re: The story of Orca

Thursday, June 03, 2004 6:11 PM by Aaron Jack
Rob,

First of all, thank you for Orca. It's a great tool. However, I have a question that I can't seem to find the answer to regarding orca. If this isn't the place, feel free to tell me so.

Anyway, in theory orca can load merge modules from the command line. Great. However, I can't seem to get it to load cabs embedded in merge modules.

I use a commandline like so:

orca.exe -q -m <mmodule_path> -f <feature_name> <msi_file_path>

This loads the merge module information into the msi perfectly, but the embedded cab seems to be lost in the void. The file table has been correctly changed, but the media table has been been modified such that the merge module files are now included another cabinet(given the index). However, they have not been added to the cab, and installation will inevitably fail if the merge module's components are requested. I would be eternally grateful for your thoughts and or suggestions.

PS. If you happen to know John Lambert or Dave Monk (fellow Microsofters), give them my regards.

# re: The story of Orca

Thursday, June 03, 2004 10:56 PM by Rob Mensching
Aaron,

I think if you give Orca the -x switch it will extract the files from the Merge Module cabinet but you're going to have to do the Media table updates yourself. My suggestion is to look at a more feature rich authoring environment. I'm biased, but the WiX toolset (http://wix.sourceforge.net) is my personal favorite.

# re: The story of Orca

Saturday, August 20, 2005 10:53 AM by Hristo
I search for orca.exe but its not easy to get the file, and MS platform SDK is broken.

Some stupid developer put a vbs script in the msi to check OS version and fail if a version is newver than 2000 (for one component mdac 2.6) . Tmp files extracted during setup all install just perfect - no windows vesrion problem even with the abovementioned mdac.. stupid developers.

# Creative Commons Add-in's Office XP PIA - Detecting Office XP Parts

Friday, July 28, 2006 4:13 AM by Rob Mensching Openly Uninstalled
Imagine a blog entry where I talk about the TypeLib detection required by the Office XP PIA install.

# Thursday Night &amp;quot;Deployment Dinner Discussions&amp;quot; with Carolyn Napier.

Friday, September 22, 2006 2:09 AM by Rob Mensching Openly Uninstalled
Imagine a blog entry where Jenny and I host Carolyn Napier and Steve Lesser at another Thursday Night &quot;Deployment Dinner Discussion&quot;.

# Creating an Installer with SharpDevelop

Monday, January 08, 2007 4:48 PM by Matt Ward

This tutorial will walk you through creating an installer from scratch using the integrated WiX support included with SharpDevelop 2.1. It takes you step by step through the process, from creating an empty WiX setup project, adding files to the installer,

# Re: Tony Goodhew - Planning the

Wednesday, June 04, 2008 6:36 AM by Channel 9

ORCA the MSI Tool stands for One Really Cool App

New Comments to this post are disabled
 
Page view tracker