The configuration file must be named BootstrapperCore.config. The easiest thing to do is just add Name="BootstrapperCore.config" to the Payload of your config file.
On Mon, Aug 18, 2014 at 1:49 PM, Tunney, Stephen <stephen.tun...@nuance.com> wrote: > Hello everyone, > > I'm attempting to write my first bootstrapper (YAY) and I've decided that > the managed bootstrapper would be ideal for our organization. I'm trying > to get a quick and dirty sample up and running with a dummy MSI inside that > installs its own WXS file. > > Running WiX 3.8 RTM with VS2013 on Win7x64. > > So my issue is this: > The prerequisite dialog appears with the license. I can click "Install" > and the UAC dialog appears. The progress bar shows up but goes nowhere for > about 10-15 seconds and eventually the process just dies. > > I have .NET 3.5.1 as a prerequisite. I have this version of the framework > installed on my machine as well as 4.5.1 though our product will only > really need 3.5 for runtime. > > I'm not getting any compiler errors or anything. I have tried this with > supportedRuntime set to: > <supportedRuntime version="v4.0" /> > OR > <supportedRuntime version="v2.0.50727" /> > > And the behaviour does not change. > > Has anyone else seen this behaviour? > > ================== Bundle.wxs > <?xml version="1.0" encoding="UTF-8"?> > <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util=" > http://schemas.microsoft.com/wix/UtilExtension" xmlns:bal=" > http://schemas.microsoft.com/wix/BalExtension"> > <Bundle Name="ExpressMBA" Version="1.0.0.0" Manufacturer="Test" > UpgradeCode="98f562b0-179f-4295-ba70-ee5a957d1b10"> > <BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost"> > <Payload > SourceFile="..\BootstrapperUX\bin\Debug\BootstrapperUX.dll.config"/> > <Payload > SourceFile="..\BootstrapperUX\bin\Debug\BootstrapperUX.dll"/> > <Payload SourceFile="C:\Program Files (x86)\WiX Toolset > v3.8\SDK\Microsoft.Deployment.WindowsInstaller.dll"/> > </BootstrapperApplicationRef> > > <Variable Name="InstallFolder" Type="string" > Value="[ProgramFilesFolder]Test\App"/> > > <Chain> > <PackageGroupRef Id='Netfx351Full' /> > <!--<PackageGroupRef Id="NetFx40Web" />--> > <MsiPackage SourceFile="..\CAS\bin\Debug\CAS.msi" Compressed="no" > Cache="yes" DisplayInternalUI="yes" EnableFeatureSelection="no" > ForcePerMachine="yes" > InstallCondition="1" > Visible="yes" Vital="yes"> > <MsiProperty Name="INSTALLLOCATION" Value="[InstallFolder]" /> > </MsiPackage> > > </Chain> > </Bundle> > > <Fragment> > <!-- Managed bootstrapper requires .NET as a dependency, since it was > written in .NET. > WiX provides a Bootstrapper for the bootstrapper. The fragment > below includes .NET. > For more information or examples see Heath Stewart's blog or the > WiX source: > > http://blogs.msdn.com/b/heaths/archive/2011/10/28/introducing-managed-bootstrapper-applications.aspx > --> > <WixVariable Id="WixMbaPrereqPackageId" Value="Netfx351Full" /> > <WixVariable Id="WixMbaPrereqLicenseUrl" Value="NetfxLicense.rtf" /> > <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework > Setup\NDP\v3.5" Value="Version" Variable="Netfx351FullVersion" /> > <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework > Setup\NDP\v3.5" Value="Version" Variable="Netfx351x64FullVersion" > Win64="yes" /> > <PackageGroup Id="Netfx351Full"> > <ExePackage Id="Netfx351Full" Cache="no" Compressed="yes" > PerMachine="yes" Permanent="yes" Vital="yes" > SourceFile="\\wat-bartist.watdev.ca > \Build_Depot\Support\DotNetRedist\dotNetFx35.exe" > DownloadUrl=" > http://www.microsoft.com/en-ca/download/details.aspx?id=25150" > > DetectCondition="(Netfx351FullVersion="3.5.30729.5420") AND (NOT > VersionNT64 OR (Netfx351x64FullVersion="3.5.30729.5420"))" > InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= > v6.0) AND (NOT (Netfx351FullVersion="3.5.30729.5420" OR > Netfx351x64FullVersion="3.5.30729.5420"))"/> > </PackageGroup> > </Fragment> > > <Fragment> > <!-- Managed bootstrapper requires .NET as a dependency, since it was > written in .NET. > WiX provides a Bootstrapper for the bootstrapper. The fragment > below includes .NET. > For more information or examples see Heath Stewart's blog or the > WiX source: > > http://blogs.msdn.com/b/heaths/archive/2011/10/28/introducing-managed-bootstrapper-applications.aspx > --> > <WixVariable Id="WixMbaPrereqPackageId" Value="Netfx451Full" /> > <WixVariable Id="WixMbaPrereqLicenseUrl" Value="NetfxLicense.rtf" /> > <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework > Setup\NDP\v4\Full" Value="Version" Variable="Netfx4FullVersion" /> > <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework > Setup\NDP\v4\Full" Value="Version" Variable="Netfx4x64FullVersion" > Win64="yes" /> > <PackageGroup Id="Netfx451Full"> > <ExePackage Id="Netfx451Full" Cache="yes" Compressed="yes" > PerMachine="yes" Permanent="yes" Vital="yes" > SourceFile="\\wat-bartist.watdev.ca > \Build_Depot\Support\DotNetRedist\NDP451-KB2858728-x86-x64-AllOS-ENU.exe" > DownloadUrl=" > http://www.microsoft.com/en-us/download/details.aspx?id=40779" > > DetectCondition="(Netfx4FullVersion="4.5.50938") AND (NOT > VersionNT64 OR (Netfx4x64FullVersion="4.5.50938"))" > InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= > v6.0) AND (NOT (Netfx4FullVersion="4.5.50938" OR > Netfx4x64FullVersion="4.5.50938"))"/> > </PackageGroup> > </Fragment> > </Wix> > > ================== BootstrapperUX.dll.config > <?xml version="1.0" encoding="utf-8" ?> > <configuration> > <configSections> > <sectionGroup name="wix.bootstrapper" > type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperSectionGroup, > BootstrapperCore"> > <section name="host" > type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.HostSection, > BootstrapperCore" /> > </sectionGroup> > </configSections> > <startup useLegacyV2RuntimeActivationPolicy="true"> > <!--<supportedRuntime version="v4.0" />--> > <supportedRuntime version="v2.0.50727" /> > </startup> > <wix.bootstrapper> > <host assemblyName="BootstrapperUX"> > <!--<supportedFramework version="v4\Full" /> > <supportedFramework version="v4\Client" />--> > <supportedFramework version="v3.5" /> > <supportedFramework version="v3.0" /> > </host> > </wix.bootstrapper> > </configuration> > > ================== BootstrapperUX.dll > using Microsoft.Tools.WindowsInstallerXml.Bootstrapper; > using System; > using System.Collections.Generic; > using System.Linq; > using System.Text; > using System.Threading.Tasks; > using System.Windows.Threading; > > namespace Stuff.BootstrapperUX > { > public class UX : BootstrapperApplication > { > /// <summary> > /// global dispatcher > /// </summary> > static public Dispatcher BootstrapperDispatcher { get; private > set; } > > /// <summary> > /// entry point for our custom UI > /// </summary> > protected override void Run() > { > this.Engine.Log(LogLevel.Verbose, "Launching Equtirac UX"); > BootstrapperDispatcher = Dispatcher.CurrentDispatcher; > > MainViewModel viewModel = new MainViewModel(this); > viewModel.Bootstrapper.Engine.Detect(); > > MainView_Master view = new MainView_Master(); > view.DataContext = viewModel; > view.Closed += (sender, e) => > BootstrapperDispatcher.InvokeShutdown(); > view.Show(); > Dispatcher.Run(); > this.Engine.Quit(0); > } > } > } > > using System; > using System.Collections.Generic; > using System.ComponentModel; > using System.Linq; > using System.Runtime.CompilerServices; > using System.Text; > using System.Threading.Tasks; > using Microsoft.Tools.WindowsInstallerXml.Bootstrapper; > > namespace Stuff.BootstrapperUX > { > internal class MainViewModel : INotifyPropertyChanged > { > #region INotifyPropertyChanged > public virtual event PropertyChangedEventHandler PropertyChanged; > protected virtual void RaisePropertyChanged([CallerMemberName] > string propertyName = null) > { > if (null != PropertyChanged) PropertyChanged(this, new > PropertyChangedEventArgs(propertyName)); > } > #endregion > > //constructor > public MainViewModel(BootstrapperApplication bootstrapper) > { > this.IsThinking = false; > this.Bootstrapper = bootstrapper; > this.Bootstrapper.ApplyComplete += this.OnApplyComplete; > this.Bootstrapper.DetectPackageComplete += > this.OnDetectPackageComplete; > this.Bootstrapper.PlanComplete += this.OnPlanComplete; > } > #region Properties > private bool installEnabled; > public bool InstallEnabled > { > get { return installEnabled; } > set > { > installEnabled = value; > RaisePropertyChanged("InstallEnabled"); > } > } > private bool uninstallEnabled; > public bool UninstallEnabled > { > get { return uninstallEnabled; } > set > { > uninstallEnabled = value; > RaisePropertyChanged("UninstallEnabled"); > } > } > private bool isThinking; > public bool IsThinking > { > get { return isThinking; } > set > { > isThinking = value; > RaisePropertyChanged("IsThinking"); > } > } > public BootstrapperApplication Bootstrapper { get; private set; } > #endregion //Properties > #region Methods > private void InstallExecute() > { > IsThinking = true; > Bootstrapper.Engine.Plan(LaunchAction.Install); > } > private void UninstallExecute() > { > IsThinking = true; > Bootstrapper.Engine.Plan(LaunchAction.Uninstall); > } > private void ExitExecute() > { > UX.BootstrapperDispatcher.InvokeShutdown(); > } > /// <summary> > /// Method that gets invoked when the Bootstrapper ApplyComplete > event is fired. > /// This is called after a bundle installation has completed. Make > sure we updated the view. > /// </summary> > private void OnApplyComplete(object sender, ApplyCompleteEventArgs > e) > { > IsThinking = false; > InstallEnabled = false; > UninstallEnabled = false; > } > /// <summary> > /// Method that gets invoked when the Bootstrapper > DetectPackageComplete event is fired. > /// Checks the PackageId and sets the installation scenario. The > PackageId is the ID > /// specified in one of the package elements (msipackage, > exepackage, msppackage, > /// msupackage) in the WiX bundle. > /// </summary> > private void OnDetectPackageComplete(object sender, > DetectPackageCompleteEventArgs e) > { > if (e.PackageId == "DummyInstallationPackageId") > { > if (e.State == PackageState.Absent) > InstallEnabled = true; > else if (e.State == PackageState.Present) > UninstallEnabled = true; > } > } > /// <summary> > /// Method that gets invoked when the Bootstrapper PlanComplete > event is fired. > /// If the planning was successful, it instructs the Bootstrapper > Engine to > /// install the packages. > /// </summary> > private void OnPlanComplete(object sender, PlanCompleteEventArgs e) > { > if (e.Status >= 0) > Bootstrapper.Engine.Apply(System.IntPtr.Zero); > } > #endregion //Methods > } > } > > <Window x:Class="Stuff.MainView_Master" > xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" > xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > xmlns:d="http://schemas.microsoft.com/expression/blend/2008" > xmlns:mc=" > http://schemas.openxmlformats.org/markup-compatibility/2006" > mc:Ignorable="d" > Title="Stuff - %BRAND_VALUE%" Width="800" MinWidth="800" > Height="600" MinHeight="600"> > <Window.Resources> > <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" > /> > </Window.Resources> > <Grid> > <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" > HorizontalAlignment="Right" Grid.Column="1"/> > </Grid> > </Window> > > Stephen Tunney > Nuance Communications, Inc. > Solutions Architect, Imaging Division > Waterloo, Ontario, Canada > stephen.tun...@nuance.com<mailto:stephen.tun...@nuance.com> > 519-880-7463 Office > NUANCE.COM > The experience speaks for itself (tm) > > > ------------------------------------------------------------------------------ > _______________________________________________ > WiX-users mailing list > WiX-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wix-users > ------------------------------------------------------------------------------ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users