public bool Upgrade(ServiceControlBaseService instance) { ZipInfo.ValidateZip(); var checkLicenseResult = CheckLicenseIsValid(); if (!checkLicenseResult.Valid) { logger.Error($"Upgrade aborted - {checkLicenseResult.Message}"); return(false); } instance.ReportCard = new ReportCard(); var restartService = instance.Service.Status == ServiceControllerStatus.Running; if (!instance.TryStopService()) { logger.Error("Service failed to stop or service stop timed out"); return(false); } try { var backupFile = instance.BackupAppConfig(); try { instance.UpgradeFiles(ZipInfo.FilePath); } finally { instance.RestoreAppConfig(backupFile); } instance.SetupInstance(); if (instance.ReportCard.HasErrors) { foreach (var error in instance.ReportCard.Errors) { logger.Error(error); } return(false); } if (restartService && !instance.TryStartService()) { logger.Error("Service failed to start after update - please check configuration for {0}", instance.Name); return(false); } } catch (Exception ex) { logger.Error("Upgrade Failed: {0}", ex.Message); return(false); } return(true); }
internal ReportCard Upgrade(ServiceControlBaseService instance, ServiceControlUpgradeOptions upgradeOptions, IProgress <ProgressDetails> progress = null) { progress = progress ?? new Progress <ProgressDetails>(); instance.ReportCard = new ReportCard(); ZipInfo.ValidateZip(); var totalSteps = 5; var currentStep = 0; progress.Report(currentStep++, totalSteps, "Stopping instance..."); if (!instance.TryStopService()) { return(new ReportCard { Errors = { "Service failed to stop" }, Status = Status.Failed }); } instance.UpgradeTransportSeam(); progress.Report(currentStep++, totalSteps, "Backing up app.config..."); var backupFile = instance.BackupAppConfig(); try { progress.Report(currentStep++, totalSteps, "Upgrading Files..."); instance.UpgradeFiles(ZipInfo.FilePath); } finally { progress.Report(currentStep++, totalSteps, "Restoring app.config..."); instance.RestoreAppConfig(backupFile); } UpgradeOptions(upgradeOptions, instance); progress.Report(++currentStep, totalSteps, "Running Queue Creation..."); instance.SetupInstance(); instance.ReportCard.SetStatus(); return(instance.ReportCard); }