A general framework for silently Deploying MSIs
I am trying to develop a sysadmin tool which will help sysadmins deploy Applications in MSI format to multiple target hosts. My intention is to discover as much of the installation data as possible by querying the MSI Database and other internal structures of the package. This should help me perform basic validations, and possibly allow the user to provide some standard values for any user inputs that the installer might seek.
I have toyed with the Windows Installer SDK and queried the MSI database tables. But from the object model, it is not immediately clear how far and how deterministically can I determine all customizable parameters which are taken from the user as input. My question is - is such a generic solution possible? where do I need to start looking?
I have toyed with the Windows Installer SDK and queried the MSI database tables. But from the object model, it is not immediately clear how far and how deterministically can I determine all customizable parameters which are taken from the user as input. My question is - is such a generic solution possible? where do I need to start looking?
0 Comments
[ + ] Show comments
Answers (5)
Please log in to answer
Posted by:
anonymous_9363
17 years ago
I am trying to develop a sysadmin tool which will help sysadmins deploy Applications in MSI format to multiple target hostYou mean like 'PSExec [computername] [command_line] ? :)
Are you sure the market's ready for *another* deployment tool? is this for a customer? Are they really *that* cheap that they won't spring for a proven technology?
If you're determined to go ahead, as for determining customisable options, I'd say you'd be best advised to query the Property table and list/store/manipulate those properties whose names are in all upper-case: these are public properties and thus can be specified in a command line. If you needed to manipulate private properties, you'd need get into adding new tables, etc which is probably not for the faint-hearted. Having said that, I have a script (VBS) which uses this technique, if you wanted to pursue that avenue.
Posted by:
arindam
17 years ago
ORIGINAL: VBScab
You mean like 'PSExec [computername] [command_line] ? :)
Are you sure the market's ready for *another* deployment tool? is this for a customer? Are they really *that* cheap that they won't spring for a proven technology?
Actually we have had this tool for a while with some rudimentary app deployment features and a few customers in the field are now demanding more sophisticated capabilities. Frankly this is my first foray into the MSI world, which makes my staple so far - Solaris Data stream packages and RPMs, look trivial. So the bottom line is that I have not much of a choice.
If you're determined to go ahead, as for determining customisable options, I'd say you'd be best advised to query the Property table and list/store/manipulate those properties whose names are in all upper-case: these are public properties and thus can be specified in a command line.
This is just about the only approach I have tried so far. The MSI database schema
If you needed to manipulate private properties, you'd need get into adding new tables, etc which is probably not for the faint-hearted. Having said that, I have a script (VBS) which uses this technique, if you wanted to pursue that avenue.
Cannot afford to be faint-hearted - so if you have got pointers to share, it will be a big help.
I am in a PoC stage where I need to achieve a set of bare minimum capabilities, and determine what's doable, what's not worth doing and what's not possible. My basic aim is to get to a point where I can install all (or at least a majority of ) MSI packages using an msiexec command-line - using overrides for Public Properties (the uppercase ones) whose values will be supplied by the administrator.
Also, in case there are multiple features in a package, I should be able to determine what all features can be installed, whether a feature is mandatory or optional, and what is the correct order of their installation.
I have been going through the MSDN documentation of the SDK, and was trying to figure out how far can I extract meaningful and reliable info from the tables of the MSI database, and if there are other sources of info within the MSI package (apart from the summary info stream).
Posted by:
anonymous_9363
17 years ago
I was going to suggest the SDK. Check out the sample scripts (in VBS - nice and easy), as they'll show you how to query the d/b, what parameters to pass with some calls and so on. IIRC, the WiFeatur.VBS script could serve double-duty for you: it has the detail on creating a temporary columns in a table and it could serve as a template for a more ambitious script/tool. I hacked it about to produce an MSI reporting script to use instead of the Report Generator in Wise Package Studio which wrongly reports some data.
Posted by:
jmcfadyen
17 years ago
If you are writing a GUI based application I would hunt these topics out
"C# exordium" by Joseph Mele
this is a great starter for accesing the installer object using C#. Explains in detail how to create MSI handles and access database information.
And look at the system.management reference in C# as well. This will allow you to execute the installation in multiple different user contexts on remote machines.
"C# exordium" by Joseph Mele
this is a great starter for accesing the installer object using C#. Explains in detail how to create MSI handles and access database information.
And look at the system.management reference in C# as well. This will allow you to execute the installation in multiple different user contexts on remote machines.
Posted by:
jmcfadyen
17 years ago
Oh one item I forgot to mention.
The use of PUBLIC properties for overrides is inherently dangerous if the application has self healing capabilities.
When you install an application using command line syntax such as:
msiexec /i <path to msi> PROPERTY="xxxx"
This property is passed into the MSI however it is not retained during self healing or repair states.
I use an XML based form for passing MSI properties into an MSI which allows retention of these properties during self repair. It doesnt suit everyone but it would be quite simple to connect this to a GUI (listbox) based property page or similar.
I dont know if this suits your purpose so let me know if it sounds of interest.
The use of PUBLIC properties for overrides is inherently dangerous if the application has self healing capabilities.
When you install an application using command line syntax such as:
msiexec /i <path to msi> PROPERTY="xxxx"
This property is passed into the MSI however it is not retained during self healing or repair states.
I use an XML based form for passing MSI properties into an MSI which allows retention of these properties during self repair. It doesnt suit everyone but it would be quite simple to connect this to a GUI (listbox) based property page or similar.
I dont know if this suits your purpose so let me know if it sounds of interest.
Rating comments in this legacy AppDeploy message board thread won't reorder them,
so that the conversation will remain readable.
so that the conversation will remain readable.