Finding variables for an MSI file

I had a fun task.  I’m working with a new piece of software from Microsoft and the documentation is still be cleaned up put together etc.

So one of my tasks was to figure out to deploy the client software silently.

I mean, I certainly don’t want to walk about to a pile of workstations going “clickity click click click type type click type type type type.”

That would be… “Repetitive” at the minimal.

So on the Plus side, the client components were already in an MSI file (YAY!)

On the negative side, I needed to pre populate certain information INTO the MSI (Servername, Email address etc) without the documentation to do it.

Somebody in the Forum suggested using “ORCA” for editing the MSI file.  I could just as easily used “Inst-ED” too.

Really all I needed was to fill in two fields “SERVERNAME” and “EMAIL Address” and had no clue where to start.  So I fired up ORCA and looked at the MSI file.

What is nice, is that inside an MSI file, all the variables, all the information is in TEXT and readable.   (with the appropriate Editor) and you can just dig through that file and look.   Most of it makes sense too.  If you understand a little coding.  Even just a bit.

It’s actually pretty easy to work with too.  Just open the “MSI” file in question and search with the find command.

image

Now this was a complete shot in the dark trying to find “email” as the parameter name.  It could have been anything but it DID reveal this

image

I did a few more searches in the file and found several references to “MONITORED-EMAIL” and did a guess that this might be the variable in question for the email address.  It really helps the Developers gave it a good descriptive name 🙂

My other one I had to see was the server name.  Normally a bit trickier.   But how about searching for “SERVER” and see what it came up with?

But a cheat.  When this particular installer ran it populated the name of the server as “LOCALHOST” so I took a shot and searched for that. 

And look what I found

 image

Yes a whole whack of variables.   I did some more searching for RMS-LOCATION and found several references to it in the file.    So again.  A “Guess” but a relatively educated one.

So to plug in the info and see what it did wasn’t hard.

To assign information to a variable within an MSI file is not hard.   You have to call up the MSI file with MSIEXEC.EXE and literally just say “X=Y” like so

MSIEXEC.EXE /I FILENAME.MSI VARIABLEX=WHATEVER VARIABLEY=SOMETHINGELSE

In my case this was for the ILM Client for Forefront Identity Manager 2010 RC0.  So it’s line turned out to be.

MSIEXEC.EXE /I ILM-CLIENT.MSI RMS-LOCATION=MYSERVERNAME.DOMAIN.LOCAL MONITORED-EMAIL=secretemailaddressiwonttell@domain.local

By the way, if you tack on a “/QUIET” to the end of that, it will make it a silent and UNattended install. (That’s assuming you have the necessary credentials to INSTALL!)

 

I realize this is a bit cryptic but I wanted to show that even if the file doesn’t have a documented, Silent install, you don’t have documentation to make it; As long as you can see INSIDE that MSI file, you might be able to pull out enough information to make it work.

 

Cheers all
Sean
The Energized Tech

Leave a Reply