public void ValidateChanges() { try { new PathsValidator(this).RunValidation(false); } catch (EngineValidationException ex) { ReportCard.Errors.Add(ex.Message); } try { ServiceControlQueueNameValidator.Validate(this); } catch (EngineValidationException ex) { ReportCard.Errors.Add(ex.Message); } var oldSettings = InstanceFinder.FindServiceControlInstance(Name); var passwordSet = !string.IsNullOrWhiteSpace(ServiceAccountPwd); var accountChanged = !string.Equals(oldSettings.ServiceAccount, ServiceAccount, StringComparison.OrdinalIgnoreCase); if (passwordSet || accountChanged) { try { ServiceAccountValidation.Validate(this); } catch (IdentityNotMappedException) { ReportCard.Errors.Add("The service account specified does not exist"); return; } catch (EngineValidationException ex) { ReportCard.Errors.Add(ex.Message); return; } } try { ConnectionStringValidator.Validate(this); } catch (EngineValidationException ex) { ReportCard.Errors.Add(ex.Message); } }
public void ApplyConfigChange() { var accountName = string.Equals(ServiceAccount, "LocalSystem", StringComparison.OrdinalIgnoreCase) ? "System" : ServiceAccount; var oldSettings = InstanceFinder.FindServiceControlInstance(Name); var fileSystemChanged = !string.Equals(oldSettings.LogPath, LogPath, StringComparison.OrdinalIgnoreCase); var queueNamesChanged = !(string.Equals(oldSettings.AuditQueue, AuditQueue, StringComparison.OrdinalIgnoreCase) && string.Equals(oldSettings.ErrorQueue, ErrorQueue, StringComparison.OrdinalIgnoreCase) && string.Equals(oldSettings.AuditLogQueue, AuditLogQueue, StringComparison.OrdinalIgnoreCase) && string.Equals(oldSettings.ErrorLogQueue, ErrorLogQueue, StringComparison.OrdinalIgnoreCase) && oldSettings.ForwardErrorMessages == ForwardErrorMessages && oldSettings.ForwardAuditMessages == ForwardAuditMessages); RecreateUrlAcl(oldSettings); if (fileSystemChanged) { var account = new NTAccount(accountName); var modifyAccessRule = new FileSystemAccessRule(account, FileSystemRights.Modify | FileSystemRights.Traverse | FileSystemRights.ListDirectory, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow); FileUtils.CreateDirectoryAndSetAcl(LogPath, modifyAccessRule); } Service.Description = Description; var configuration = ConfigurationManager.OpenExeConfiguration(Service.ExePath); var settings = configuration.AppSettings.Settings; ApplySettingsChanges(settings); configuration.ConnectionStrings.ConnectionStrings.Set("NServiceBus/Transport", ConnectionString); configuration.Save(); var passwordSet = !string.IsNullOrWhiteSpace(ServiceAccountPwd); var accountChanged = !string.Equals(oldSettings.ServiceAccount, ServiceAccount, StringComparison.OrdinalIgnoreCase); var connectionStringChanged = !string.Equals(ConnectionString, oldSettings.ConnectionString, StringComparison.Ordinal); //have to save config prior to creating queues (if needed) if (queueNamesChanged || accountChanged || connectionStringChanged) { SetupInstance(); } if (passwordSet || accountChanged) { Service.ChangeAccountDetails(accountName, ServiceAccountPwd); } }
public void ApplyConfigChange() { var accountName = string.Equals(ServiceAccount, "LocalSystem", StringComparison.OrdinalIgnoreCase) ? "System" : ServiceAccount; var oldSettings = InstanceFinder.FindServiceControlInstance(Name); var fileSystemChanged = !string.Equals(oldSettings.LogPath, LogPath, StringComparison.OrdinalIgnoreCase); var queueNamesChanged = !(string.Equals(oldSettings.AuditQueue, AuditQueue, StringComparison.OrdinalIgnoreCase) && string.Equals(oldSettings.ErrorQueue, ErrorQueue, StringComparison.OrdinalIgnoreCase) && string.Equals(oldSettings.AuditLogQueue, AuditLogQueue, StringComparison.OrdinalIgnoreCase) && string.Equals(oldSettings.ErrorLogQueue, ErrorLogQueue, StringComparison.OrdinalIgnoreCase) && oldSettings.ForwardErrorMessages == ForwardErrorMessages && oldSettings.ForwardAuditMessages == ForwardAuditMessages ); RecreateUrlAcl(oldSettings); if (fileSystemChanged) { var account = new NTAccount(accountName); var modifyAccessRule = new FileSystemAccessRule(account, FileSystemRights.Modify | FileSystemRights.Traverse | FileSystemRights.ListDirectory, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow); FileUtils.CreateDirectoryAndSetAcl(LogPath, modifyAccessRule); } Service.Description = Description; var configuration = ConfigurationManager.OpenExeConfiguration(Service.ExePath); var settings = configuration.AppSettings.Settings; var version = Version; settings.Set(SettingsList.HostName, HostName); settings.Set(SettingsList.Port, Port.ToString()); settings.Set(SettingsList.DatabaseMaintenancePort, DatabaseMaintenancePort.ToString()); settings.Set(SettingsList.LogPath, LogPath); settings.Set(SettingsList.ForwardAuditMessages, ForwardAuditMessages.ToString()); settings.Set(SettingsList.ForwardErrorMessages, ForwardErrorMessages.ToString(), version); settings.Set(SettingsList.AuditRetentionPeriod, AuditRetentionPeriod.ToString(), version); settings.Set(SettingsList.ErrorRetentionPeriod, ErrorRetentionPeriod.ToString(), version); settings.RemoveIfRetired(SettingsList.HoursToKeepMessagesBeforeExpiring, version); settings.Set(SettingsList.AuditQueue, AuditQueue); settings.Set(SettingsList.ErrorQueue, ErrorQueue); if (Version >= Compatibility.ForwardingQueuesAreOptional.SupportedFrom) { if (!ForwardErrorMessages) { ErrorLogQueue = null; } if (!ForwardAuditMessages) { AuditLogQueue = null; } } settings.Set(SettingsList.ErrorLogQueue, ErrorLogQueue); settings.Set(SettingsList.AuditLogQueue, AuditLogQueue); configuration.ConnectionStrings.ConnectionStrings.Set("NServiceBus/Transport", ConnectionString); configuration.Save(); var passwordSet = !string.IsNullOrWhiteSpace(ServiceAccountPwd); var accountChanged = !string.Equals(oldSettings.ServiceAccount, ServiceAccount, StringComparison.OrdinalIgnoreCase); var connectionStringChanged = !string.Equals(ConnectionString, oldSettings.ConnectionString, StringComparison.Ordinal); //have to save config prior to creating queues (if needed) if (queueNamesChanged || accountChanged || connectionStringChanged) { try { QueueCreation.RunQueueCreation(this); } catch (QueueCreationFailedException ex) { ReportCard.Errors.Add(ex.Message); } catch (QueueCreationTimeoutException ex) { ReportCard.Errors.Add(ex.Message); } } if (passwordSet || accountChanged) { Service.ChangeAccountDetails(accountName, ServiceAccountPwd); } }