View Full Version : Suite UI: List features to be installed

12-04-2013, 03:29 PM
Is there a method available to display a list packages that will be installed to end users? I am not displaying the traditional feature tree as I am not giving the user the option to toggle features, but I want to show what will be installed in a static list format before they click 'Install'. That list will vary depending on some radio button options they select during the install.

I know that I can query Feature[name].actionState and then probably show a list depending on this value. It would be easier to be dynamically compile the text to display all Features .actionState=install

Also this only displays the feature names and not the individual packages, such as Microsoft .NET Framework 4.0 Full, etc. What I am looking for is to list each of the packages as I have described in the Suite package.
Hopefully there is something fairly easy to implement.

Thank you.

12-06-2013, 09:42 AM
I meant to get back to this earlier; I had to do some internal research, and I have bad news: we don't offer a good way to handle this generically. In the future we could add a control akin to the FeatureSelectionTree (perhaps a PackageActionList or PackageProgressList) that offers the experience you're looking for. But in the meantime, you'll have to write some UI actions, or possibly an extension, and bake some knowledge in. Namely you can author a series of SetProperty actions that extend a property with the names of packages associated with each feature, conditioned on whether the feature is being installed, or a C++ extension action that queries the features and builds up the resulting property in one go. In your case, if everything is directly based on the radio buttons (as opposed to also depending on machine state), you might be able to simplify it by building the property based on the radio buttons instead of the features.

12-06-2013, 11:21 AM
So if I have a feature that contains four packages, can I list those packages by name to the end users.
For an example, I let's say I have a feature named System Prerequisites
System Prerequsites contain the following packages:
Microsoft Visual C++ 2005 SP1 Redistributable x86 (exe)
Microsoft Visual C++ 2010 SP1 Redistributable x86 (exe)
Microsoft .NET Framework 4.0 Full (exe)
SAP Crystal Reports runtime engine 13.0.1 for .NET (msi)

However, some systems will already have some of these prerequisites installed, so they will not be installed. Their detection conditions are already met. Does this make sense?
So for the System Prerequisites to be installed lets say only Microsoft Visual C++ 2012 SP1 Redistributable x86 and SAP Crystal Reports Runtime engine 13.01.1 for .NET need to be installed.
How can I tell that the detection conditions are met so I can even set a property for each of these packages? I guess I could search for each of the conditions as a custom event. But it seems to me that there should be an easier way.
It is this property that I was looking for - something to tell me that the package state will be installed or not installed. But this does not seem to be exposed, correct?

Basically I was looking for something to mirror the elegance of the Basic MSI prerequisite installer that lists out all of the prerequisites to be installed. It gives the end user something to visualize for the work to be completed on their system. It could be that I am approaching this goal in the wrong way too. The hard part is that some prerequisites are big time sloths like .NET Framework and SQL Server 2012 Express, so that is why we like to show the consumer what work needs to be done.

At first I tried bundling the Prerequisites in a Basic MSI but that pops up dialogs and requires users to click on and OK button at the end, and that destroys the elegance that you guys have put into the Advance UI. The Advanced UI Suite really does an excellent job of metering the work when it is installing, I have no problems with that.

I really do appreciate all the feedback and clarity on these issues Michael. It does help.

12-09-2013, 01:34 PM
Yes, you've nailed the current limitations on the head. Today you can choose to duplicate all the conditions so that if the relevant feature is selected and a copy of each package's detect condition (perhaps stored into a property) indicates it'll be installed, you could add its name to a list. But without duplicating the conditions in some fashion, that information is not available to you.

I agree there should be an easier way. In the future, I'd like to make this information available, either indirectly by making a specialized control available that does this automatically, or directly through either a property notation (like FEATURES[name].actionState does for features today) or a condition notation that lets you query each package you care to mention. The engine obviously is tracking this, but we don't give you the means to check it easily. If we make it available in a control, we'd probably also offer a progress page version that gave an experience like Visual Studio 2010's install (the list of all the packages that will be affected, with icons for what's been done and what's coming next).

Which brings to mind a side point: if you wanted this on the progress page, you could try using "Package Action" conditions in the OnPackagesConfiguring event to change the value of a property. However that event runs after the Install button is clicked, and that condition type isn't available in the wizard, so it won't help your case.