Feature state is not getting evaluated during MSI Installation - wix

Tool used : WIX.
Technology :Windows Installer
I have an MSI with 10 features, all 10 features are shown in the UI, User can select/deselect the desired features.
By default all 10 features are marked as selected (in my features.wxs file).
I have a custom action that copies/deployed few files and performs necessary actions based on what features are selected.
for example: if feature A is selected the respective folder for A is copied to user PC and certain actions are performed.
All of the above works fine if I schedule my custom action as DoAction on the click of next button in feature selection dialog, but if I schedule if elsewhere in UI or execute sequence, the feature evaluation is not happening (always all 10 features are selected i.e. default values are retained).
I have tried the below workarounds and none of it works:
I have scheduled the custom Action right after CostFinalize.
I have tried to CostFinalize inside my custom action using MSIdoactionA().
Kindly suggest what changes needs to be adapted.

Related

I need to remove feature selection screen from my wix installer

I have created a setup using wix installer, During installations user must have to install all features from feature tree, So I don't want to display this feature option screen during installation. Is there any way to achieve this.
Dialog Set: You can select a dialog set without this dialog? Default dialog sets. You are probably using Advanced or Mondo?
Mandatory Features: You can set all features to be mandatory? I guess you might already have done so. Then the user can not do any damage from the GUI (maybe they still can from msiexec.exe command line).
Custom Dialogs: You can create your own dialog set and take it out? Some details here.
Minimalistic sample
Zip version of Minimalistic sample

WiX 3.7: How to add or update a dialog during uninstall?

I need to add a dialog box that would pop up during complete uninstall (not major upgrade) right after the confirmation ("Are you sure you want to uninstall this product?") dialog. This dialog would prompt the user to answer a question and based on the response, set up a property that would be used in the condition for the RemoveRegistryKey element (i.e. it will remove a registry key only if the user selects an option to delete the key).
I have an idea how to add a dialog to the install sequence (I am using a modified WixUI_InstalLDir sequence to which I added a custom dialog I need during installation), but I can't find any references that would explain how to add a custom dialog to an uninstall sequence. It would be even better if I could modify the uninstall confirmation dialog, so the user would see one dialog instead of two. An the key thing would be to be able to set up a property that could be used in the component condition.
Is this possible? Are there any examples how to do this?
This is against Microsoft design guidelines. Add/Remove programs calls the uninstall with a silent UI argument and the UI sequence is never processed.
The only place you can author UI during an uninstall is a "change" or "maintenance" UI experience where they select Repair | Change | Remove and on Remove do your UI. But you'd have to lock down the Remove buttom and force them through this path. Also realize they could call msiexec /x /qb from the command line.
Bottom line is Microsoft made this choice to make the uninstall process simple and easy for the user. As for removing the registry key, Microsoft would say that you should leave user data on uninstall.

Can we localize WIX msi and bundle using language selection UI at runtime?

We have an MSI and Bundle created in Wix. I need to localize both of these in such a way that language selection GUI will be popped-up and language can be selected by the user at run time. Would be really appreciated if anybody can help me on this.
For MSI, i am working on creating another bootstapper for bringing-up with language selection combobox and invoke the tranfomed MSI with the required transform(using command shell). I am still not sure about the feasibilty of this approach. I am facing issue in creating combo box in customized UI of bootstapper and invoking batch command to run this msi in the required language.
For Bundle - I am still working on finding a method. if anybody has any idea/samples for this.
It will be helpful if anybody can help me with this issue or provide me with an another alternative method to meet above requirement.
Thanks,
The recommended method (and for that matter, the method used by most MS products), is as you describe.
Create an MSI localized for each language
pick a base and generate MST's
Package the MSTs, the MSI and the bootstrapper, which will
present the language selection dialog and call MSIEXEC, passing TRANSFORM=language.mst as an argument
After the MSIEXEC process has started, all localization is finalized, so to speak. Any selection must go on outside the MSI system.
See this codeproject article for an example.
I guess this may help you:
creating language selection dialog using WiX.
there is a limitation that custom UI for language selection is created using C# based custom bootstrapper. This may lead to the requirement of .Net framework on host machine.
UI selection for MSI
Create an MSI localized for each language
Pick a base and generate MST's
Package the MSTs, the MSI into a bootstrapper.
Customize the HyperlinkTheme.xml to include radio button for selecting each language.
Use the Variable tag to link radio button from UI to .wxs file
Include the msi property in the msi tag and hard code the path to MST's and InstallCondition attribute to differentiate each selection
Use the latest version of wix for this feature support.
Bundle support only automatic base detection there is no support for UI selection

Prompting for user confirmation before upgrading previous version

Using WiX, we would like to be able to uninstall a previous version if it is already installed. I am able to do this automatically based on the thread here.
But how does one go about prompting the user if they actually want to uninstall the old version first, before running the RemoveExistingProducts action? ie. through a custom menu item that only launches if FindRelatedProducts returns 1, for example?
You can try this approach:
In Upgrade table define a rule for older product versions:
http://msdn.microsoft.com/en-us/library/aa372379(VS.85).aspx
For this rule set the ActionProperty column to a custom property, for example OLDER_PRODUCTS
Use this property to conditionally show a custom dialog in which the user can select if he wants an upgrade or not.
Use the properties in the custom dialog to condition RemoveExistingProducts standard action.
This way the upgrade rule detects older versions and shows a custom dialog if it does. This custom dialog can then take the user choice and use it to skip the upgrade.

WiX Show Dialog Based on Feature to be Installed

Let me be upfront I am novice with WiX. I have a custom dialog CustomSetupTypeDlg.wxs that changes the Typical/Custom/Complete to Desktop/Server/Suite. It sets WixUI_InstallMode to InstallDesktop, InstallServer and InstallSuite appropriately.
I need to have the user browse for an installation folder depending upon what feature is to be installed. If InstallDesktop or InstallSuite is selected the user has to select two different paths for DESKTOPINSTALLDIRECTORY and SERVERINSTALLDIRECTORY. However if the install mode is InstallServer only SERVERINSTALLDIRECTORY choice should be presented.
I am uncertain on how to go about doing this.
You want to have actions in your InstallExecute sequence that display the dialogs you need. Inside the tag you provide a conditional, which, when true, causes the action to actually happen. See this tutorial, specifically section 5.3 for a list of conditionals.
I decided to simplify the project by splitting the desktop and server features into two separate installers.