protected override void ProcessRecord() { var details = new ServiceControlNewInstance { InstallPath = InstallPath, LogPath = LogPath, DBPath = DBPath, Name = Name, DisplayName = string.IsNullOrWhiteSpace(DisplayName) ? Name : DisplayName, ServiceDescription = Description, ServiceAccount = ServiceAccount, ServiceAccountPwd = ServiceAccountPassword, HostName = HostName, Port = Port, DatabaseMaintenancePort = DatabaseMaintenancePort, VirtualDirectory = VirtualDirectory, AuditQueue = AuditQueue, ErrorQueue = ErrorQueue, AuditLogQueue = string.IsNullOrWhiteSpace(AuditLogQueue) ? null : AuditLogQueue, ErrorLogQueue = string.IsNullOrWhiteSpace(ErrorLogQueue) ? null : ErrorLogQueue, ForwardAuditMessages = ForwardAuditMessages.ToBool(), ForwardErrorMessages = ForwardErrorMessages.ToBool(), AuditRetentionPeriod = AuditRetentionPeriod, ErrorRetentionPeriod = ErrorRetentionPeriod, ConnectionString = ConnectionString, TransportPackage = ServiceControlCoreTransports.All.First(t => t.Matches(Transport)), SkipQueueCreation = SkipQueueCreation }; var zipfolder = Path.GetDirectoryName(MyInvocation.MyCommand.Module.Path); var logger = new PSLogger(Host); var installer = new UnattendServiceControlInstaller(logger, zipfolder); try { logger.Info("Installing Service Control instance..."); if (installer.Add(details, PromptToProceed)) { var instance = InstanceFinder.FindServiceControlInstance(details.Name); if (instance != null) { WriteObject(PsServiceControl.FromInstance(instance)); } else { throw new Exception("Unknown error creating instance"); } } } catch (Exception ex) { ThrowTerminatingError(new ErrorRecord(ex, null, ErrorCategory.NotSpecified, null)); } }
protected override void ApplySettingsChanges(KeyValueConfigurationCollection settings) { if (!ForwardErrorMessages) { ErrorLogQueue = null; } if (!ForwardAuditMessages) { AuditLogQueue = null; } settings.Set(AuditInstanceSettingsList.HostName, HostName); settings.Set(AuditInstanceSettingsList.Port, Port.ToString()); settings.Set(AuditInstanceSettingsList.DatabaseMaintenancePort, DatabaseMaintenancePort.ToString(), Version); settings.Set(AuditInstanceSettingsList.LogPath, LogPath); settings.Set(AuditInstanceSettingsList.ForwardAuditMessages, ForwardAuditMessages.ToString()); settings.Set(AuditInstanceSettingsList.AuditRetentionPeriod, AuditRetentionPeriod.ToString(), Version); settings.Set(AuditInstanceSettingsList.AuditQueue, AuditQueue); }
protected override void ApplySettingsChanges(KeyValueConfigurationCollection settings) { if (!ForwardErrorMessages) { ErrorLogQueue = null; } if (!ForwardAuditMessages) { AuditLogQueue = null; } settings.Set(ServiceControlSettings.HostName, HostName); settings.Set(ServiceControlSettings.Port, Port.ToString()); settings.Set(ServiceControlSettings.DatabaseMaintenancePort, DatabaseMaintenancePort.ToString(), Version); settings.Set(ServiceControlSettings.LogPath, LogPath); settings.Set(ServiceControlSettings.ForwardAuditMessages, ForwardAuditMessages.ToString(), Version); settings.Set(ServiceControlSettings.ForwardErrorMessages, ForwardErrorMessages.ToString(), Version); settings.Set(ServiceControlSettings.AuditRetentionPeriod, AuditRetentionPeriod.ToString(), Version); settings.Set(ServiceControlSettings.ErrorRetentionPeriod, ErrorRetentionPeriod.ToString(), Version); settings.RemoveIfRetired(ServiceControlSettings.HoursToKeepMessagesBeforeExpiring, Version); settings.Set(ServiceControlSettings.AuditQueue, AuditQueue, Version); settings.Set(ServiceControlSettings.ErrorQueue, ErrorQueue); settings.Set(ServiceControlSettings.AuditLogQueue, AuditLogQueue, Version); settings.Set(ServiceControlSettings.ErrorLogQueue, ErrorLogQueue, Version); if (RemoteInstances != null) { if (Compatibility.RemoteInstancesDoNotNeedQueueAddress.SupportedFrom <= Version) { foreach (var instance in RemoteInstances) { instance.QueueAddress = null; } } settings.Set(ServiceControlSettings.RemoteInstances, RemoteInstanceConverter.ToJson(RemoteInstances), Version); } }
protected override void BeginProcessing() { if (string.IsNullOrWhiteSpace(HostName)) { WriteWarning("HostName set to default value 'localhost'"); HostName = "localhost"; } if (string.IsNullOrWhiteSpace(AuditQueue)) { WriteWarning("AuditQueue set to default value 'audit'"); AuditQueue = "audit"; } if (string.IsNullOrWhiteSpace(ErrorQueue)) { WriteWarning("ErrorQueue set to default value 'error'"); ErrorQueue = "error"; } if (string.IsNullOrWhiteSpace(ServiceAccount)) { WriteWarning("ServiceAccount set to default value 'LocalSystem'"); ServiceAccount = "LocalSystem"; } if (ForwardAuditMessages.ToBool() & string.IsNullOrWhiteSpace(AuditLogQueue)) { WriteWarning("AuditLogQueue set to default value 'audit.log'"); ErrorLogQueue = "audit.log"; } if (ForwardErrorMessages.ToBool() & string.IsNullOrWhiteSpace(ErrorLogQueue)) { WriteWarning("ErrorLogQueue set to default value 'error.log'"); ErrorLogQueue = "error.log"; } }
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); } }