From 247be1a20223b78a8b202e684db1c232a2aa115e Mon Sep 17 00:00:00 2001 From: Schwirg László Date: Fri, 24 Sep 2021 18:09:14 +0200 Subject: [PATCH] v1.8.5 - a service kezelő menüjének átalakítása --- Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs | 26 +++++++++++--------------- Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Menu.cs | 3 ++- Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs | 364 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Vrh.Log4Pro.MaintenanceConsole/Program.cs | 2 +- Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs | 4 ++-- 5 files changed, 197 insertions(+), 202 deletions(-) diff --git a/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs b/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs index 4c555a4..2aa80cf 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs @@ -16,7 +16,10 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS #region ColorConsole public static class ColorConsole { - private static bool silentMode = false; + /// + /// true= nem ír semmit a konzolra, és a readline egy előre feltöltött bufferból olvassa az inputokat + /// + public static bool SilentMode { get; set; } = false; private static string[] readlineList = null; /// Üzenet és utána Billentyűzet lenyomásra vár @@ -28,13 +31,6 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS ColorConsole.WriteLine(text ?? "Press any key to continue...", ConsoleColor.Yellow); return ColorConsole.ReadKey(); } - - /// - /// Beállítja a command mode-ot, ami azt jelenti, hogy nem ír semmit a konzolra, - /// és a readline egy előre feltöltött bufferból olvassa az inputokat - /// - /// - public static void SetSilentMode(bool silentmode=true) { silentMode = silentmode; } /// /// Feltölti a command mode readline bufferét egy string tömbbel; /// minden ColorConsole.ReadLine a tömb pillanatnyi első elemét adja vissza, amjd törli azt a tömbből @@ -58,7 +54,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS /// /// true, ha van lenyomott billentyű, illetve command mode-ban mindig false /// - public static bool KeyAvailable { get { if (silentMode) { return false; } else { return Console.KeyAvailable; } } } + public static bool KeyAvailable { get { if (SilentMode) { return false; } else { return Console.KeyAvailable; } } } /// @@ -66,7 +62,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS /// /// /// - public static void SetWindowSize(int w, int h) { if (!silentMode) { Console.SetWindowSize(w, h); } } + public static void SetWindowSize(int w, int h) { if (!SilentMode) { Console.SetWindowSize(w, h); } } /// /// Visszaadja a lenyomott billentyűt, ha van, commandmode-ban pedig az enter-t @@ -74,7 +70,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS /// public static ConsoleKeyInfo ReadKey() { - if (silentMode) { return GetConsoleKey(ConsoleKey.Enter); } + if (SilentMode) { return GetConsoleKey(ConsoleKey.Enter); } else { return Console.ReadKey(); } } @@ -144,7 +140,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS while (true) { string prompt = text; - if (silentMode) + if (SilentMode) { if (readlineList == null || readlineList.Length == 0) { return null; } else @@ -179,7 +175,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS /// public static void SetCursorPosition(int remembercursorleft, int remembercursortop) { - if (silentMode) { return; } + if (SilentMode) { return; } Console.SetCursorPosition(remembercursorleft, remembercursortop); } public static void SetCursorStartOfLine() { SetCursorPosition(0, ColorConsole.CursorTop); } @@ -207,7 +203,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS /// public static void WriteLine(string text = null, ConsoleColor? f = null, ConsoleColor? b = null, string bracket = null,string prefix="", string suffix = "") { - if (silentMode) { return; } + if (SilentMode) { return; } Write(text, f, b, bracket,prefix,suffix); Console.WriteLine(); } @@ -223,7 +219,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS /// public static void Write(string text = null, ConsoleColor? f = null, ConsoleColor? b = null, string bracket = null, string prefix = "",string suffix="") { - if (silentMode) { return; } + if (SilentMode) { return; } if (!string.IsNullOrEmpty(prefix)) { Write(prefix); } if (!string.IsNullOrEmpty(bracket) && bracket.Length==1) { bracket = bracket + bracket; } if (!string.IsNullOrEmpty(bracket)) { Console.Write($"{bracket[0]}"); } diff --git a/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Menu.cs b/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Menu.cs index 74504c8..801a7ca 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Menu.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Menu.cs @@ -219,12 +219,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MenuNS /// /// /// - public void DisplayItems(int columns = 1, int columnlength = 0) + public void DisplayItems(int columns = 1, int columnlength = 0,string listheader=null) { if (Menu.IsCommandMode()) { return; } int columncounter = 0; ColorConsole.WriteLine(); + if (listheader != null) { ColorConsole.WriteLine(listheader); } var i = 1; ColorConsole.SetCursorPosition(0, ColorConsole.CursorTop); MenuItemIndentWidth = SetMenuItemHeaderWidth(MenuItemList, columns); diff --git a/Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs b/Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs index ae4ed21..09a7522 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs @@ -34,35 +34,142 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS public static object Execute(object o1 = null, object o2 = null) { var args = (o1 as Menu.ExecutorParameter).Args; + var config = new WindowsServiceManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); + var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES); var functionkey = CommandLine.GetCommandLineArgument(args, CLP.CMD_FUNCTION); + while (true) // servicegroup selection + { + List selectedServicegroups = null; + List selectedServices = null; + string selectedFunctionkey = null; - var config = new WindowsServiceManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); - var ep = new Menu.ExecutorParameter(config, args); - var menufunctions = new Menu("Manage Windows Services", "Select the management function!") - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Register.KEY, "Register", Register,ep)) - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Unregister.KEY, "Unregister", Unregister, ep)) - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Start.KEY, "Start", Start, ep)) - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Stop.KEY, "Stop", Stop, ep)) - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Kill.KEY, "Kill", Kill, ep)) - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Purge.KEY, "Purge", Purge, ep)) - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.SetUserAccount.KEY, "Set user account", SetUserAccount, ep)) - .SetSelectionMode(Menu.SelectionMode.Single) - .SetMenuHeaderDisplayer(ServiceListDisplayer); - menufunctions.ExecuteMenu(functionkey); + if (!ColorConsole.SilentMode) + { + var menuservicegroups = DisplayWindowsServiceGroupMenu(config, $"Select the windows service group(s) to manage!"); + menuservicegroups.AddMenuItem(new Menu.ItemSeparator()); + menuservicegroups.AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Purge.KEY, "Purge")); + menuservicegroups.AddMenuItem(new Menu.ItemSeparator()); + + menuservicegroups.DisplayTitle(); + menuservicegroups.DisplayItems(1); + Menu.Selection srg = menuservicegroups.Select(selectedserviceindexes); + if (srg.Result == Menu.SelectionResult.Exit) { break; } + else if (srg.Result == Menu.SelectionResult.None) { break; } + else if (srg.Result == Menu.SelectionResult.Error) { break; } + else if (srg.Result == Menu.SelectionResult.Ok) { } + else { } + if (srg.SelectedKeyList.Contains(CLP.Module.WindowsServiceManager.Function.Purge.KEY) && srg.SelectedKeyList.Count()>1) { continue; } + if (srg.SelectedKeyList.Contains(CLP.Module.WindowsServiceManager.Function.Purge.KEY)) { Purge(); continue; } + selectedServicegroups = srg.SelectedParameterList.Select(p => (p.Parameters as WindowsServiceGroup)).ToList(); + } + + while (true) //service and function selection + { + var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage!", selectedServicegroups); + //menuservices.DisplayTitle(); + menuservices.DisplayItems(1, listheader: selectedServicegroups == null ? null : "Services for groups: " + string.Join(",", selectedServicegroups.Select(wsg => $"{wsg.Xml_Description} ({wsg.Xml_Key})"))); + Menu.Selection sr = menuservices.Select(selectedserviceindexes); + if (sr.Result == Menu.SelectionResult.Exit) { break; } + else if (sr.Result == Menu.SelectionResult.None) { break; } + else if (sr.Result == Menu.SelectionResult.Error) { break; } + else if (sr.Result == Menu.SelectionResult.Ok) { } + else { } + selectedServices = sr.SelectedParameterList.Select(p => (p.Parameters as WindowsService)).ToList(); + + var menufunctions = new Menu("Manage Windows Services", "Select the management function!") + .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Register.KEY, "Register")) + .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Unregister.KEY, "Unregister")) + .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Start.KEY, "Start")) + .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Stop.KEY, "Stop")) + .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Kill.KEY, "Kill")) + .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.SetUserAccount.KEY, "Set user account")) + .SetSelectionMode(Menu.SelectionMode.Single) + ; + //menufunctions.DisplayTitle(); + menufunctions.DisplayItems(1); + Menu.Selection srf = menufunctions.Select(functionkey); + if (srf.Result == Menu.SelectionResult.Exit) { break; } + else if (srf.Result == Menu.SelectionResult.None) { break; } + else if (srf.Result == Menu.SelectionResult.Error) { break; } + else if (srf.Result == Menu.SelectionResult.Ok) { } + else { } + selectedFunctionkey = srf.SelectedKeyList.First(); + + switch (selectedFunctionkey) + { + case CLP.Module.WindowsServiceManager.Function.Register.KEY: + foreach (var ws in selectedServices) + { + try + { + var success = WindowsServiceManagerCore.Register(ws, selectedServices.Select(x => x.Name).ToList()); + ColorConsole.WriteLine($"Service registered. Name:{ws.Name}", ConsoleColor.Green); + } + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } + } + break; + case CLP.Module.WindowsServiceManager.Function.Unregister.KEY: + foreach (var ws in selectedServices) + { + try + { + var success = WindowsServiceManagerCore.Unregister(ws); + ColorConsole.WriteLine($"Service unregistered. Name:{ws.Name}", ConsoleColor.Green); + } + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } + } + break; + case CLP.Module.WindowsServiceManager.Function.Start.KEY: + foreach (var ws in selectedServices) + { + try + { + var success = WindowsServiceManagerCore.Start(ws.Name, ws.Xml_StartTimeout); + ColorConsole.WriteLine($"Service started. Name:{ws.Name}", ConsoleColor.Green); + } + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } + } + break; + case CLP.Module.WindowsServiceManager.Function.Stop.KEY: + foreach (var ws in selectedServices) + { + try + { + var success = WindowsServiceManagerCore.Stop(ws.Name, ws.Xml_StopTimeout); + ColorConsole.WriteLine($"Service stopped. Name:{ws.Name}", ConsoleColor.Green); + } + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } + } + break; + case CLP.Module.WindowsServiceManager.Function.Kill.KEY: + foreach (var ws in selectedServices) + { + try + { + var success = WindowsServiceManagerCore.Kill(ws.Name); + ColorConsole.WriteLine($"Service killed. Name:{ws.Name}", ConsoleColor.Green); + } + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } + } + break; + case CLP.Module.WindowsServiceManager.Function.SetUserAccount.KEY: SetUserAccount(config, selectedserviceindexes); break; + case CLP.Module.WindowsServiceManager.Function.Purge.KEY: Purge(); break; + } + } + } return null; } #endregion Execute #region First level Executors with UI - private static object Purge(object parameter, object o) + private static void Purge() { - var config = (parameter as Menu.ExecutorParameter).GetConfig(); while (true) { ColorConsole.WriteLine($"Enter servicename mask to select from the result list (% and ? are wildchars)...", ConsoleColor.Yellow); ColorConsole.WriteLine($"...or enter service name directly (put an asterisk (*) before the name).", ConsoleColor.Yellow); var mask = ColorConsole.ReadLine($" ---> ", ConsoleColor.Yellow).ToUpper(); - if (mask == "EX") { return o; } + if (mask == "EX") { return; } else if (mask == "") { continue; } if (mask.StartsWith("*") && mask.Length>=2) { DeleteOneService(mask.Substring(1)); } @@ -86,12 +193,12 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS { foreach (var p in ms.SelectedParameterList) { - if (DeleteOneService((string)(p.Parameters))) { return o; } + if (DeleteOneService((string)(p.Parameters))) { return; } } } } } - return o; + return; } private static bool DeleteOneService(string servicename) { @@ -111,150 +218,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS } return false; } - private static object Kill(object parameter, object o) - { - var config = (parameter as Menu.ExecutorParameter).GetConfig(); - var args = (parameter as Menu.ExecutorParameter).Args; - - var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES); - - var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(Kill)}'!", silent: true); - - Menu.Selection sr = menuservices.Select(selectedserviceindexes); - if (sr.Result == Menu.SelectionResult.Exit) { return o; } - else if (sr.Result == Menu.SelectionResult.None) { return o; } - else if (sr.Result == Menu.SelectionResult.Error) { return o; } - else if (sr.Result == Menu.SelectionResult.Ok) { } - else { } - foreach (var p in sr.SelectedParameterList) - { - WindowsService ws = p.Parameters as WindowsService; - try - { - var success = WindowsServiceManagerCore.Kill(ws.Name); - ColorConsole.WriteLine($"Service killed. Name:{ws.Name}", ConsoleColor.Green); - } - catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } - } - return o; - } - private static object Register(object parameter, object o) - { - var config = (parameter as Menu.ExecutorParameter).GetConfig(); - var args = (parameter as Menu.ExecutorParameter).Args; - - var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES); - - var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(Register)}'!", silent: true); - - Menu.Selection sr = menuservices.Select(selectedserviceindexes); - if (sr.Result == Menu.SelectionResult.Exit) { return o; } - else if (sr.Result == Menu.SelectionResult.None) { return o; } - else if (sr.Result == Menu.SelectionResult.Error) { return o; } - else if (sr.Result == Menu.SelectionResult.Ok) { } - else { } - foreach (var p in sr.SelectedParameterList) - { - WindowsService ws = p.Parameters as WindowsService; - try - { - var success = WindowsServiceManagerCore.Register(ws, sr.SelectedParameterList.Select(x => (x.Parameters as WindowsService).Name).ToList()); - ColorConsole.WriteLine($"Service registered. Name:{ws.Name}", ConsoleColor.Green); - } - catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } - } - return o; - } - private static object Unregister(object parameter, object o) - { - var config = (parameter as Menu.ExecutorParameter).GetConfig(); - var args = (parameter as Menu.ExecutorParameter).Args; - var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES); - - var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(Unregister)}'!", silent: true); - - Menu.Selection sr = menuservices.Select(selectedserviceindexes); - if (sr.Result == Menu.SelectionResult.Exit) { return o; } - else if (sr.Result == Menu.SelectionResult.None) { return o; } - else if (sr.Result == Menu.SelectionResult.Error) { return o; } - else if (sr.Result == Menu.SelectionResult.Ok) { } - else { } - foreach (var p in sr.SelectedParameterList) - { - WindowsService ws = p.Parameters as WindowsService; - try - { - var success = WindowsServiceManagerCore.Unregister(ws); - ColorConsole.WriteLine($"Service unregistered. Name:{ws.Name}", ConsoleColor.Green); - } - catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } - } - return o; - } - private static object Start(object parameter, object o) - { - var config = (parameter as Menu.ExecutorParameter).GetConfig(); - var args = (parameter as Menu.ExecutorParameter).Args; - var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES); - - var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(Start)}'!", silent: true); - - Menu.Selection sr = menuservices.Select(selectedserviceindexes); - if (sr.Result == Menu.SelectionResult.Exit) { return o; } - else if (sr.Result == Menu.SelectionResult.None) { return o; } - else if (sr.Result == Menu.SelectionResult.Error) { return o; } - else if (sr.Result == Menu.SelectionResult.Ok) { } - else { } - foreach (var p in sr.SelectedParameterList) - { - WindowsService ws = p.Parameters as WindowsService; - try - { - var success = WindowsServiceManagerCore.Start(ws.Name, ws.Xml_StartTimeout); - ColorConsole.WriteLine($"Service started. Name:{ws.Name}", ConsoleColor.Green); - } - catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } - } - return o; - } - private static object Stop(object parameter, object o) - { - var config = (parameter as Menu.ExecutorParameter).GetConfig(); - var args = (parameter as Menu.ExecutorParameter).Args; - var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES); - - var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(Stop)}'!", silent: true); - - Menu.Selection sr = menuservices.Select(selectedserviceindexes); - if (sr.Result == Menu.SelectionResult.Exit) { return o; } - else if (sr.Result == Menu.SelectionResult.None) { return o; } - else if (sr.Result == Menu.SelectionResult.Error) { return o; } - else if (sr.Result == Menu.SelectionResult.Ok) { } - else { } - foreach (var p in sr.SelectedParameterList) - { - WindowsService ws = p.Parameters as WindowsService; - try - { - var success = WindowsServiceManagerCore.Stop(ws.Name, ws.Xml_StopTimeout); - ColorConsole.WriteLine($"Service stopped. Name:{ws.Name}", ConsoleColor.Green); - } - catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } - } - return o; - } - private static object SetUserAccount(object parameter, object o) + private static void SetUserAccount(WindowsServiceManagerXmlProcessor config, string selectedserviceindexes) { - var config = (parameter as Menu.ExecutorParameter).GetConfig(); - var args = (parameter as Menu.ExecutorParameter).Args; - var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES); - - var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(SetUserAccount)}'!", silent: true); + var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(SetUserAccount)}'!"); Menu.Selection sr = menuservices.Select(selectedserviceindexes); - if (sr.Result == Menu.SelectionResult.Exit) { return o; } - else if (sr.Result == Menu.SelectionResult.None) { return o; } - else if (sr.Result == Menu.SelectionResult.Error) { return o; } + if (sr.Result == Menu.SelectionResult.Exit) { return; } + else if (sr.Result == Menu.SelectionResult.None) { return; } + else if (sr.Result == Menu.SelectionResult.Error) { return; } else if (sr.Result == Menu.SelectionResult.Ok) { } else { } @@ -269,7 +240,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS if (username == null) { GetUsernameAndPassword(wmiService,ws,out username, out password); - if (username == "EX" || password == "EX") { return null; } + if (username == "EX" || password == "EX") { return; } } if (WindowsServiceManagerCore.SetUserAccount(wmiService, username, password)) { ColorConsole.WriteLine($"Service user account changed. Name:{ws.Name}", ConsoleColor.Green); } else { ColorConsole.WriteLine($"Service user account change FAILED! Name:{ws.Name}", ConsoleColor.Red); } @@ -277,36 +248,46 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS } catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } } - return o; + return; } #endregion First level Executors with UI #region DisplayServices private static void ServiceListDisplayer() { DisplayWindowsServiceMenu(); } - public static Menu DisplayWindowsServiceMenu(WindowsServiceManagerXmlProcessor config=null,string prompt = null,bool silent=false) + public static Menu DisplayWindowsServiceMenu(WindowsServiceManagerXmlProcessor config=null,string prompt = null,List servicegroups=null) { if (config==null) { config = new WindowsServiceManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); } var menuservices = new Menu("Windows services",prompt) .SetMenuItemDisplayer(DisplayServiceInfo) - .SetSelectionMode(Menu.SelectionMode.Multi); + .SetSelectionMode(Menu.SelectionMode.Multi) + .SetMenuHeaderDisplayer(ServiceListDisplayer) + ; menuservices.ClearMenuItemList(); - List wsgdefList = config.GetWindowsServiceGroupDefinitionList(); - foreach (var wsgdef in wsgdefList) - { - string menuitemtext = wsgdef.Xml_Description + "(" + string.Join(",", wsgdef.Xml_WindowsServiceKeyList) + ")"; - menuservices.AddMenuItem(new Menu.ItemGroup(wsgdef.Xml_Key, menuitemtext, wsgdef.Xml_WindowsServiceKeyList)); - } - - menuservices.AddMenuItem(new Menu.ItemSeparator());// separator - - List wsdefList = config.GetWindowsServiceDefinitionList(); + List wsdefList = config.GetWindowsServiceDefinitionList(servicegroups); foreach (var wsdef in wsdefList) { menuservices.AddMenuItem(new Menu.Item(wsdef.Xml_Key, null, null, new Menu.ExecutorParameter(pars: wsdef.CollectWindowsServiceInfo()))); - } + } + return menuservices; + } + public static Menu DisplayWindowsServiceGroupMenu(WindowsServiceManagerXmlProcessor config = null, string prompt = null) + { + if (config == null) { config = new WindowsServiceManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); } + var menuservices = new Menu("Windows services", prompt) + .SetMenuItemDisplayer(DisplayServiceInfo) + .SetSelectionMode(Menu.SelectionMode.Single) + .SetMenuHeaderDisplayer(ServiceListDisplayer) + ; + menuservices.ClearMenuItemList(); - if (!silent) { menuservices.DisplayItems(1); } + List wsgdefList = config.GetWindowsServiceGroupDefinitionList(); + foreach (var wsgdef in wsgdefList) + { + //string menuitemtext = wsgdef.Xml_Description + "(" + string.Join(",", wsgdef.Xml_WindowsServiceKeyList) + ")"; + string menuitemtext = wsgdef.Xml_Description; + menuservices.AddMenuItem(new Menu.Item(wsgdef.Xml_Key, menuitemtext, null, new Menu.ExecutorParameter(pars: wsgdef))); + } return menuservices; } #endregion DisplayServices @@ -320,7 +301,10 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS if (lineix == 0) { ColorConsole.Write($"{ws.Description}", ConsoleColor.Black, ConsoleColor.White); - ColorConsole.WriteLine($"{ws.DisplayName}", bracket: "()"); + ColorConsole.Write($"{ws.DisplayName}", bracket: "()"); + ColorConsole.Write($", User:"); + ColorConsole.Write($"{ws.StartName}", ConsoleColor.White); + ColorConsole.WriteLine(); return ws.DisplayName+ws.Description; } else if (lineix == 1) @@ -374,12 +358,6 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS } else if (lineix == 4) { - ColorConsole.Write($"User:"); - ColorConsole.WriteLine($"{ws.StartName}", ConsoleColor.White); - return ws.StartName; - } - else if (lineix == 5) - { ColorConsole.WriteLine(); return " "; } @@ -728,11 +706,31 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS #region GetWindowsServiceGroupDefinitionList public WindowsServiceGroup GetWindowsServiceGroup(string key) { return _winservicegrouplist.FirstOrDefault(x => x.Xml_Key == key); } public List GetWindowsServiceGroupDefinitionList() { return _winservicegrouplist; } + + + public List GetGroupWindowsServiceKeyList(string groupkey,out string groupdescription) + { + groupdescription = null; + List wsgdefList = GetWindowsServiceGroupDefinitionList().Where(sgr => sgr.Xml_Key == groupkey || groupkey == null).ToList(); + if (groupkey != null && wsgdefList != null && wsgdefList.Any()) { groupdescription = wsgdefList.First().Xml_Description; } + List allwskeys = new List(); + foreach (var wsg in wsgdefList) { allwskeys = allwskeys.Concat(wsg.Xml_WindowsServiceKeyList).ToList(); } + return allwskeys; + } #endregion GetWindowsServiceGroupDefinitionList #region GetWindowsServiceDefinitionList public WindowsService GetWindowsService(string key) { return _winservicelist.FirstOrDefault(x => x.Xml_Key == key); } - public List GetWindowsServiceDefinitionList() { return _winservicelist; } + public List GetWindowsServiceDefinitionList(List wsgList=null) + { + if (wsgList == null) { return _winservicelist; } + else + { + var wsList = new List(); + foreach (var wsg in wsgList) { wsList = wsList.Concat(wsg.Xml_WindowsServiceKeyList.Select(k=> _winservicelist.FirstOrDefault(ws=>ws.Xml_Key==k))).Where(ws=>ws!=null).ToList(); } + return wsList; + } + } public List GetWindowsServiceDefinitionListInStartOrder() { return _winservicelistinstartorder; } public List GetWindowsServiceDefinitionListInStopOrder() { return _winservicelistinstoporder; } private List ProduceWindowsServiceDefinitionListInStartOrder() diff --git a/Vrh.Log4Pro.MaintenanceConsole/Program.cs b/Vrh.Log4Pro.MaintenanceConsole/Program.cs index 9a47cf9..2f2ecb7 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Program.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Program.cs @@ -70,7 +70,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole var forcedmodulekey = CommandLine.GetCommandLineArgument(args, CLP.CMD_MODULE); var commandmode = !string.IsNullOrEmpty(forcedmodulekey); var silentmode = commandmode && !string.IsNullOrEmpty(CommandLine.GetCommandLineArgument(args, CLP.CMD_SILENT, switchtype: true)); - ColorConsole.SetSilentMode(silentmode); + ColorConsole.SilentMode=silentmode; Menu.SetCommandMode(commandmode); var appconfigpath = CommandLine.GetCommandLineArgument(args, CLP.CMD_APPCONFIG); diff --git a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs index bceaa7c..09f7ab4 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.8.4.0")] -[assembly: AssemblyFileVersion("1.8.4.0")] +[assembly: AssemblyVersion("1.8.5.0")] +[assembly: AssemblyFileVersion("1.8.5.0")] -- libgit2 0.21.2