cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Reureu
Level 10

Bug: ISSetupFilesExtract does nothing when using transform under certain conditions.

Hi,

I have spotted another bug in InstallShield 2010, after a customer tried to deploy our application using a transform he generated with Microsoft SCCM.
The bug occurs in Basic MSI projects.

The process to generate a transform with SCCM is pretty much the same as the response transform wizard of InstallShield:

  • The UI sequence is executed
  • The user clicks and enters details in the forms. These details are saved in MSI properties.
  • All MSI properties, including ones set by custom actions are saved in the transform.


So, yes, SCCM saves all MSI properties are in the transform, including a rather relevant one: ISSETUPFILESCOMPLETED. The user then uses this transform to deploy

You can see me coming, can't you?
I realized that the ISSetupFilesExtract does nothing if ISSETUPFILESCOMPLETED is set, which is the bug!

This has several consequences:

  • The support files are not extracted to the temp folder
  • The SUPPORTDIR property is not set
  • If your installation relies on the support files, it might simply fail!


What puzzles me a bit is that ISSetupFilesExtract has no apparent condition in the InstallUISequence and in the InstallExecuteSequence.
It seems that the condition on the ISSETUPFILESCOMPLETED property is used internally in the code executed by ISSetupFilesExtract!

I think ISSetupFilesExtract should do its job anyway, and should not be dependent on this ISSETUPFILESCOMPLETED public property.

So as always, my questions are:

  • Has this bug already been reported/solved? Any article in the knowledge base?
  • If not, do you see any workaround? Resetting the ISSETUPFILESCOMPLETED before ISSetupFilesExtract maybe?
Labels (1)
0 Kudos
(5) Replies
Reureu
Level 10

I have also seen that the InstallShield Response Transform wizard removes this ISSETUPFILESCOMPLETED property from the transform since IS 2008.

Obviously other tools (like MS SCCM) don't know about such properties.

Hence, using such public properties in the control flow of the setup is really not a good idea!
0 Kudos
Reureu
Level 10

Hi,

I have googled for ISSETUPFILESCOMPLETED and the results have been rather interesting.

The problem seem to have been there for years, or since the ISSetupFilesExtract custom action exists!
It has created problems to many domain administrators who were using transforms to deploy applications whose setup was made with Installshield!
One recent example among others: Acrobat Reader 8.0

Now, shall I interpret the silence of Flexera Software as an answer like "It is not a bug of InstallShield, but a bug of third party transform wizards"?
0 Kudos
MichaelU
Level 12 Flexeran
Level 12 Flexeran

It's really a limitation in the idea of transform wizards. Since Windows Installer properties are the only way to persist information from action to action, that's how the actions have to do things. But similarly settings that are changed by the user that want to capture are persisted the same way. The only way we've found to address this is by special casing certain properties that we know cause problems. Arguably there could be a convention for this sort of thing (such as start properties that shouldn't be persisted with an underscore) but it's a little late for all parties.

For this specific case, even if there were a better way to handle the support files actions, using it would preclude the option for an administrator to extract the files and pass in properties that point to that predetermined location.
0 Kudos
Reureu
Level 10

Hi Michael,

Thanks for your answer.
I understand your point of view, but I am wondering why this property is tested inside the ISSetupFilesExtract.
Am I right in thinking that this custom action tests if ISSETUPFILESCOMPLETED is set and then reacts as follows:

  • If it is not set, then the support files are extracted, and the SUPPORTDIR property is set. Then ISSETUPFILESCOMPLETED is set to "Completed"?
  • If it is already set, then it does nothing?


Is this mechanism implemented to avoid extracting the support files twice, or to avoid overwriting support files if they already exists?
Or is it used to inform ISSetupFilesCleanup that the support files have been extracted?

What I am trying to understand is whether I can implement a workaround, like clearing the ISSETUPFILESCOMPLETED property before ISSetupFilesExtract. Would such a workaround have any nasty side-effect?
0 Kudos
MichaelU
Level 12 Flexeran
Level 12 Flexeran

I believe there are some odd interactions with InstallScript MSI projects that the property solution resolves. ISSETUPFILESCOMPLETED is not checked for cleanup. As long as it really is the first time to run things, it should be okay to clear the property - perhaps (untested) a SetProperty to {} action near the beginning of the execute sequence, conditioned against UILevel. But I think just adjusting the transform would be easier.
0 Kudos