PDA

View Full Version : Removing Wizard pages in Suite project



hupperts
06-04-2014, 05:18 PM
I'm trying to remove some of the default wizard pages that allow users to select which features to install and instead set the features in a managed code action. I was able to get the managed code action integrated and according to the log file the properties are being set correctly.

The issue I'm having is that the wizard gets to the InstallationProgress page and then just hangs with "Initializing". What am I missing?

-hupperts

MichaelU
06-05-2014, 08:45 AM
Did you get to that page via an Install button or an Install action on some other button? Without that, the suite won't know to begin installation.

hupperts
06-05-2014, 09:00 AM
Hi Michael,

No, I didn't. After enabling the Install button the installation continues as expected.

However, the whole reason to disable the user choice of features was to set that in code. I tried using the SetProperty from my managed code extension and the installer ignored my selections. (I did verify that the extension code is running in the debug log).

This is the code I'm using in my extension:
suiteExtension.set_Property("FEATURE[ChildMSI1].actionState", "install");

-hupperts

MichaelU
06-06-2014, 08:19 AM
Hmm. I'm going to have to do some more research before I can propose the best solution here. In the meantime, here's what's going on. The properties of the format FEATURE[name].actionState are proxy properties only known to the UI. When processing changes to them, the UI changes it into a request that modifies the feature action. However the managed code action support runs at the engine level so the property is just a raw property with a funny name. Because of this, here are the options that would work:
Change to a non-managed action that can be a UI extension. Then the properties will hit the proxies.
Set some properties (use names that aren't the proxy names) from your managed code. Then read and handle these properties in the UI. (For example, set NameActionState in the managed code, then add SetProperty actions on the Next button that set FEATURE[name].actionState to [NameActionState].
Of those, the second option is probably easier (otherwise you would have used C++ in the first place) so I'd start there.

hupperts
06-06-2014, 08:59 AM
Thanks for the reply Michael. I'm definitely interested to hear what you find out. That's disappointing that managed code still doesn't have parity with C++ at run-time. My old application that had all the logic in InstallScript with calls to FeatureSelectItem. I'm trying to avoid writing InstallScript if possible.

hupperts
06-06-2014, 10:44 AM
I tried what you suggested and it does work but seems cumbersome. Here's what I did:

1. Created a Property for each Feature in the Suite. (ChildMSI1InstallState, ChildMSI2InstallState, etc).
2. Modified my managed extension DLL to set the new properties.
3. Added a Property Comparison Condition to each Feature in the Suite to check the property.
4. Called my managed extension method from the OnBegin Event.

Is there an easier way to do this while still choosing the features to install from my managed extension DLL? When I'm done I'll have 75-100 child installers managed from my Suite.

-hupperts