/// /// when engine plans action for a package, set the requested future state of /// the package based on what the user requested /// private void SetPackagePlannedState(Wix.PlanPackageBeginEventArgs planPackageBeginEventArgs) { var pkgId = planPackageBeginEventArgs.PackageId; var pkg = BundlePackages.FirstOrDefault(p => p.Package == pkgId); if (pkg != null) { if (pkg.RequestedInstallState.HasValue) { //override default value set by bootstrapper engine planPackageBeginEventArgs.State = pkg.RequestedInstallState.Value; } else if (pkg.CurrentInstallState == Wix.PackageState.Present) { if (this.PlannedAction == Wix.LaunchAction.Uninstall) { planPackageBeginEventArgs.State = Wix.RequestState.Absent; } else if (this.PlannedAction == Wix.LaunchAction.Repair) { planPackageBeginEventArgs.State = Wix.RequestState.Repair; } else { planPackageBeginEventArgs.State = Wix.RequestState.Present; } } } }
/// /// when engine plans action for a feature, set the requested future state of /// the package based on what the user requested /// private void SetFeaturePlannedState(Wix.PlanMsiFeatureEventArgs planMsiFeatureEventArgs) { var pkg = BundlePackages.First(p => p.Package == planMsiFeatureEventArgs.PackageId); if (pkg != null) { var feature = pkg.AllFeatures.First(feat => feat.Feature == planMsiFeatureEventArgs.FeatureId); if (feature != null) { if (feature.RequestedState.HasValue) { planMsiFeatureEventArgs.State = feature.RequestedState.Value; } else if (this.PlannedAction == Wix.LaunchAction.Uninstall) { planMsiFeatureEventArgs.State = Wix.FeatureState.Absent; } else if (feature.CurrentInstallState == Wix.FeatureState.Local || (feature.Level > 0 && feature.Level <= this.InstallLevel)) { planMsiFeatureEventArgs.State = Wix.FeatureState.Local; } } } }