InstallShield 2008


Well, seems like I finally got myself a Blog – now all I have to do is get into the habit of putting stuff on it…so to kick if of I am going to do my first blog about InstallShield 2008.
 
I recently had the dubious pleasure of having to create a brand new set of installer for my companies product set and to do this I opted to use InstallSheild 2008 Premier.
 
Why Premier – well the main reason was that we use MSBuild and to get the installer to be auto built I needed to have InstallShield installed on the build machine, but this is not where I want to work when I create the scripts, so the choice was either buy two copies of InstallShield 2008 Professional or buy a copy of Premier as that comes with 10 licenses for a StandAlone command line installer…the latter was the cheaper alternative. Sure I get other features too, but if I could have bought the standalone licenses separately I would have.
 
As a first attempt I just tried to keep things simple and replicate the current installer organisation, which was done with VS2005 deployment projects. This meant that I firstly needed to create about 12 MergeModules (MSMs) and a couple of MSIs. This proved to be harder than you might imagine so in the end I simplified it and stuck to just 8 MSMs and 2 MSIs.
 
Problems that I encoutered for which I found resolution (via Macrovision InstallSheild maintenance support) were:
 

How do I get the CustomerInformation dialog All Users/Just Me radio buttons to appear?

It seems that this can only be achieved by using the DirectEditor and meddling directly with the installer tables. Essentially I needed to ‘drop’ two rows from the ControlCondition table, namely the two rows where Dialog=CustomerInformation and Control=RadioGroup.

This seems very odd to me as after-all, the dialog if available in the editor, yet I had to resort to manually editing the installer tables to get them to appear – but this is the way to do it so say Macrovision support.

Installing .NET 2.0 Framework was included, but when installed on a .NET-less machine it offered to install the Framework as an optional installation – whereas I wanted it to be mandatory. How do I make the inclusion of .NET 2.0 Framework mandatory?

It was easy to include the .NET 2.0 Framework via the Release Wizard but the dialog does not offer any configuration for the optionality of the installation. It turns out that selecting the Release node on the project tree display more information in the right pane that is made available in the Release Wizard and within that pane are a series of tabs, one of which is called .NET/J# and on there is a Yes/No option (default Yes bizarely) for ‘Display .NET option dialog. Set this to No and it now installs .NET 2.0 Framework seemlessly as part of the main installation.

This however has now brought with it a new problem. Whether .NET 2.0 Framework is already on the machine or not, this now requires a reboot of the machine following installation – when this is not the case, so now I need to find out why it thinks this.

Of the issues yet to be resolved:

  • PreCompile in MSIs uses the old .NET 1.0 NGen interface, even if I change the setting to ensure it is using the .NET 2.0 Framework’s NGen.exe it creates a custom action using the older style (i.e. does not use "install"/"uninstall" and therefore does not use the new Dependencies PreCompilation that .NET 2.0 NGen is capable of. I found a way round this for now but it required manual editing of the installer tables again – if you wanna know what I did then blog me and I’ll explain.
  • PreCompile does not seems to work at all for MSMs
  • I get lots of ICE30 errors when I build one of my MSIs with "compile to single setup.exe" turned on, but do not get these errors if I leave file uncompressed on the file system. I am awaiting a proper resolution to this, but in the meantime I was advised to turn off the ICE30 validation checks…not a good resolution but I am having to do this at this time.

Well, that’s enough for now…lets see if anyone reads this!

 
Advertisement
%d bloggers like this: