Wix should install any one feature among two features - installation

I have two features in the Wix source code, Feature_A, and Feature_B., and populate the FeatureTree in the installer.
In my Use case, the installer should allow either the Feature_A or Feature_B, not both.
if the user has selected both features, the installer should warn not to proceed further.
I am not using customized dialogues for the installer. Is this possible to do this condition check as part of the standard installer sequence? any suggestions?

There's no concept of mutually exclusive features in MSI. You have to modify the UI (and have corrospending gate checks for silent installations ) to not proceed if neither or both features are selected.
Another possibility is to not show this screen and abstract the selection to a radiobutton group and based on which radiobutton is selected set the corrosponding feature for installation.

Related

Create MSI and Enforce All Users with Visual Studio

I have created an installer using Visual Studio 2015 (with the Visual Studio installer addon). The goal is to always run the APP with the same local resources, regardless of who is logged on, therefore we target [CommonAppDataFolder] (C:\ProgramData... on Win10). The installer works just fine placing all shared resources where we want them. But the generated MSI provides the option to install as "everyone" or just the "just me"
We want to grey out the option to install as "just me".
Is there a way to do this from within Visual Studio as part of the build process for the MSI.
I see some solutions that involve running MSIEXEC with different parms eg, ALLUSERS, but I am wondering if there is a way to set this up to occur automatically in Visual Studio.
Thank you.
The project Properties window (NOT properties) can be shown by selecting the project in Solution Explorer, and then F4. You can set InstallAllUsers to True there.
The Properties window of the InstallFolder dialog has a settting InstallAllUsersVisible, so just set that to False.
I don't use that particular tool. There might be a better way to
achieve what you want than the below "hack". Adding since you got no other answers (yet).
UPDATE: Go with Phil's answer. I don't have the tool to check but it looks good. Leaving in this answer just for the record. Not recommended unless you have other things you want to change.
Post-Process MSI
Hiding Control: Not ideal, but if you don't mind post-processing the MSI (can be automated with MSI API coding) you could insert a row into the ControlCondition table to hide the whole dialog control in question.
Ad-hoc sample: Hiding the "Back" button from a setup's LicenseAgreementDlg - just add this row (I guess events defined elsewhere could show it again):
.
Dialog at runtime: Below is the actual dialog at runtime.
MSI API
To automate the above. Get hold of WiRunSQL.vbs - part of the Windows SDK - just search your SDK folder if you have Visual Studio installed. Also plenty of copies on github.
In a batch file:
cscript.exe "%~dp0"\WiRunSQL.vbs "MySetup.msi" "INSERT INTO `ControlCondition` (`Dialog_`, `Control_`, `Action`, `Condition`) VALUES ('LicenseAgreementDlg', 'Back', 'Hide', '1')"
pause
I honestly might hard code ALLUSERS=1 in the Property table as well.
Links:
SQL modification of MSI file
List tables in MSI file using VBScript
Windows Installer Scripting Examples

How can I add an optional UI to WiX toolset

I have already made a quiet installer (without the need to click any buttons but some progress bar is shown while installation is in progress) for a project deployment. This time I wish to add an optional graphical user interface.
By default, the installer should just run without clicking anything, when a parameter is given, let's say, the msiexec parameter: /qf, the installer would pop up an interface that can be interacted with.
I've already added the required UI dll to the project reference, but given msiexec /i C:\Setup.msi /qf, it doesn't work. How can I get it to work?
Did you try the procedure described in this well known Wix tutorial?
At its simplest level, this means that you essentially just add this to the Wix source file and you get a default GUI:
<UIRef Id="WixUI_Minimal" />
You can also try the other "defaults":
WixUI_Mondo (normal)
WixUI_FeatureTree
WixUI_InstallDir
WixUI_Advanced
A search turned up a similar answer, and one talking about extending the default gui.
Just modify the WixUI_Minimal.wxs file:
How to build a minimal WiX installer UI without a license page?
WiX toolset WixUI_Minimal Dialog Set
Customised UI's for WiX
Then use properties to condition the dialogs to show or hide as you launch the MSI via msiexec.exe.

WiX 3.0: Basic one dialog installer

I would like to create a setup with three basic dialogs (one input dialog):
Browse (next + exit button)
Progress
Finish
No welcome dialog or any other unnecessary dialog. Maybe even combine 1&2, but I would like to stick to predefined dialogs for the moment.
I looked at WixUI_Minimal, but couldn't figure out how to modify the sequence of dialogs so that my specification is met.
Links or informations are much appreciated.
Maybe you could use SharpSetup to create such minimal installer (dialogs can be graphically edited in Visual Studio designer). It requires .NET at runtime - not sure if it is acceptable in your case.
Disclaimer: I'm the author of SharpSetup.

Pasting in MSI Installer TextBoxs

We are upgrading our installers to MSI, and have noticed that you can not "right click and paste" into the text boxes. You can however ctrl+v. Is there a setting that you can switch on to enable context menus within the installer?
The MSI native UI is horribly primitive, though pretty clever considering it's expressed using a set of database tables ;)
If you need to exercise any degree of control over the UI then you would be better off writing your own front-end interview applet to build up a set of configuration parameters and using that to launch the install with a minimal UI, passing the the parameters in as a set of installer properties.
MSI subclasses the controls it displays, the WndProc for edit controls which MSI sets for edit controls may be implemented in a way that it does not pass right-click events to the original WndProc, and therefore context menu is not displayed.
There's no setting that you can enable context menu functionality.

Customizing Repair option in MSI

I have a Visual Studio Setup Project that is very basic except for one modification. I have two different libraries that I would like installed based on the user's selection. I added a checkbox screen and conditions to the files. They can install either component or both components. This all works fine.
Now for my requirement. Let's say that the user installed the MSI and selected only one component. Now, they need to install the second component from the same MSI. If they run the MSI again, I get the option to repair or remove. Repair will only fix the component that was installed originally. How can I give them the option to install the other components by showing the checkbox screen again?
If this functionality isn't available in a VS Setup Project, is there something else where it is? WiX perhaps?
I don't think VS Setup projects support this. Wix or MSI's created from other tools like Installshield can support this. The usual way to handle this would be to create separate features and assign the different components to each feature. Then if the MSI is built using WiX or some other tool, from add/remove there will be the Change button/option through which you can get the option to repair, modify, or uninstall. Modify then lets you change your feature selections without doing a reinstall.
You need to use the free MSI editors like ORCA or SuperORCA. Microsoft use to provide ORCA tool in their service pack. Not sure if they are continuing so. SuperORCA tool you can find at http://www.pantaray.com/msi_super_orca.html. Now when I had similar task to achieve following was my approach. I used SuperOrca to open my MSI file.
1] On repair/remove MSI dialog screen, add one more radiobutton for "Modify" - In SuperOrca-->Under RadioButton table --> Add entry for Modify radiobutton
2] Rename BackButton's text to "Reinstall" from its original "Back" --> In SuperOrca-->under Control table --> change Text property to rename Back to Reinstall
3] On selection of Repair/Remove radio button enable Finish button and disable Reinstall button. On select of modify radio button enable Reinstall button and disable Finish button - In SuperOrca--> Under ControlCondition table --> add entries for enable/disable "Reinstall" and "Finish" buttons for each comibinations for repair/remove screen (In my case dialog form name is "MaintananceForm")
4] Now from SuperOrca tools ControlEvent table find out conrol name for BackButton, In my case it is "PreviousButton". Now modify its Event, Argument & Condition entries from the table. And the values for these properties must be the same for the "Next" button properties from the Welcome screen of MSI file which redirects user to show installation options to choose.
Note: This is working fine for me. But when you re-select installation options again and click Next, somehow it does not forced for installing the selected option. Instead it repairs the MSI. I tried deleting entries from Windows\Installer folder so that MSI will not pick cashed installed version but no luck. If anybody is having answer on how to forced MSI to re-install through MSI setup wizard please let me know.

Resources