Commit 247be1a20223b78a8b202e684db1c232a2aa115e

Authored by Schwirg László
1 parent e9ee2f8b

v1.8.5

- a service kezelő menüjének átalakítása
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs
@@ -16,7 +16,10 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS @@ -16,7 +16,10 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS
16 #region ColorConsole 16 #region ColorConsole
17 public static class ColorConsole 17 public static class ColorConsole
18 { 18 {
19 - private static bool silentMode = false; 19 + /// <summary>
  20 + /// true= nem ír semmit a konzolra, és a readline egy előre feltöltött bufferból olvassa az inputokat
  21 + /// </summary>
  22 + public static bool SilentMode { get; set; } = false;
20 private static string[] readlineList = null; 23 private static string[] readlineList = null;
21 24
22 /// Üzenet és utána Billentyűzet lenyomásra vár 25 /// Üzenet és utána Billentyűzet lenyomásra vár
@@ -28,13 +31,6 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS @@ -28,13 +31,6 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS
28 ColorConsole.WriteLine(text ?? "Press any key to continue...", ConsoleColor.Yellow); return ColorConsole.ReadKey(); 31 ColorConsole.WriteLine(text ?? "Press any key to continue...", ConsoleColor.Yellow); return ColorConsole.ReadKey();
29 } 32 }
30 33
31 -  
32 - /// <summary>  
33 - /// Beállítja a command mode-ot, ami azt jelenti, hogy nem ír semmit a konzolra,  
34 - /// és a readline egy előre feltöltött bufferból olvassa az inputokat  
35 - /// </summary>  
36 - /// <param name="silentmode"></param>  
37 - public static void SetSilentMode(bool silentmode=true) { silentMode = silentmode; }  
38 /// <summary> 34 /// <summary>
39 /// Feltölti a command mode readline bufferét egy string tömbbel; 35 /// Feltölti a command mode readline bufferét egy string tömbbel;
40 /// minden ColorConsole.ReadLine a tömb pillanatnyi első elemét adja vissza, amjd törli azt a tömbből 36 /// 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 @@ -58,7 +54,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS
58 /// <summary> 54 /// <summary>
59 /// true, ha van lenyomott billentyű, illetve command mode-ban mindig false 55 /// true, ha van lenyomott billentyű, illetve command mode-ban mindig false
60 /// </summary> 56 /// </summary>
61 - public static bool KeyAvailable { get { if (silentMode) { return false; } else { return Console.KeyAvailable; } } } 57 + public static bool KeyAvailable { get { if (SilentMode) { return false; } else { return Console.KeyAvailable; } } }
62 58
63 59
64 /// <summary> 60 /// <summary>
@@ -66,7 +62,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS @@ -66,7 +62,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS
66 /// </summary> 62 /// </summary>
67 /// <param name="w"></param> 63 /// <param name="w"></param>
68 /// <param name="h"></param> 64 /// <param name="h"></param>
69 - public static void SetWindowSize(int w, int h) { if (!silentMode) { Console.SetWindowSize(w, h); } } 65 + public static void SetWindowSize(int w, int h) { if (!SilentMode) { Console.SetWindowSize(w, h); } }
70 66
71 /// <summary> 67 /// <summary>
72 /// Visszaadja a lenyomott billentyűt, ha van, commandmode-ban pedig az enter-t 68 /// Visszaadja a lenyomott billentyűt, ha van, commandmode-ban pedig az enter-t
@@ -74,7 +70,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS @@ -74,7 +70,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS
74 /// <returns></returns> 70 /// <returns></returns>
75 public static ConsoleKeyInfo ReadKey() 71 public static ConsoleKeyInfo ReadKey()
76 { 72 {
77 - if (silentMode) { return GetConsoleKey(ConsoleKey.Enter); } 73 + if (SilentMode) { return GetConsoleKey(ConsoleKey.Enter); }
78 else { return Console.ReadKey(); } 74 else { return Console.ReadKey(); }
79 } 75 }
80 76
@@ -144,7 +140,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS @@ -144,7 +140,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS
144 while (true) 140 while (true)
145 { 141 {
146 string prompt = text; 142 string prompt = text;
147 - if (silentMode) 143 + if (SilentMode)
148 { 144 {
149 if (readlineList == null || readlineList.Length == 0) { return null; } 145 if (readlineList == null || readlineList.Length == 0) { return null; }
150 else 146 else
@@ -179,7 +175,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS @@ -179,7 +175,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS
179 /// <param name="remembercursortop"></param> 175 /// <param name="remembercursortop"></param>
180 public static void SetCursorPosition(int remembercursorleft, int remembercursortop) 176 public static void SetCursorPosition(int remembercursorleft, int remembercursortop)
181 { 177 {
182 - if (silentMode) { return; } 178 + if (SilentMode) { return; }
183 Console.SetCursorPosition(remembercursorleft, remembercursortop); 179 Console.SetCursorPosition(remembercursorleft, remembercursortop);
184 } 180 }
185 public static void SetCursorStartOfLine() { SetCursorPosition(0, ColorConsole.CursorTop); } 181 public static void SetCursorStartOfLine() { SetCursorPosition(0, ColorConsole.CursorTop); }
@@ -207,7 +203,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS @@ -207,7 +203,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS
207 /// <param name="suffix"></param> 203 /// <param name="suffix"></param>
208 public static void WriteLine(string text = null, ConsoleColor? f = null, ConsoleColor? b = null, string bracket = null,string prefix="", string suffix = "") 204 public static void WriteLine(string text = null, ConsoleColor? f = null, ConsoleColor? b = null, string bracket = null,string prefix="", string suffix = "")
209 { 205 {
210 - if (silentMode) { return; } 206 + if (SilentMode) { return; }
211 Write(text, f, b, bracket,prefix,suffix); 207 Write(text, f, b, bracket,prefix,suffix);
212 Console.WriteLine(); 208 Console.WriteLine();
213 } 209 }
@@ -223,7 +219,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS @@ -223,7 +219,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS
223 /// <param name="suffix"></param> 219 /// <param name="suffix"></param>
224 public static void Write(string text = null, ConsoleColor? f = null, ConsoleColor? b = null, string bracket = null, string prefix = "",string suffix="") 220 public static void Write(string text = null, ConsoleColor? f = null, ConsoleColor? b = null, string bracket = null, string prefix = "",string suffix="")
225 { 221 {
226 - if (silentMode) { return; } 222 + if (SilentMode) { return; }
227 if (!string.IsNullOrEmpty(prefix)) { Write(prefix); } 223 if (!string.IsNullOrEmpty(prefix)) { Write(prefix); }
228 if (!string.IsNullOrEmpty(bracket) && bracket.Length==1) { bracket = bracket + bracket; } 224 if (!string.IsNullOrEmpty(bracket) && bracket.Length==1) { bracket = bracket + bracket; }
229 if (!string.IsNullOrEmpty(bracket)) { Console.Write($"{bracket[0]}"); } 225 if (!string.IsNullOrEmpty(bracket)) { Console.Write($"{bracket[0]}"); }
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Menu.cs
@@ -219,12 +219,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MenuNS @@ -219,12 +219,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MenuNS
219 /// </summary> 219 /// </summary>
220 /// <param name="columns"></param> 220 /// <param name="columns"></param>
221 /// <param name="columnlength"></param> 221 /// <param name="columnlength"></param>
222 - public void DisplayItems(int columns = 1, int columnlength = 0) 222 + public void DisplayItems(int columns = 1, int columnlength = 0,string listheader=null)
223 { 223 {
224 if (Menu.IsCommandMode()) { return; } 224 if (Menu.IsCommandMode()) { return; }
225 225
226 int columncounter = 0; 226 int columncounter = 0;
227 ColorConsole.WriteLine(); 227 ColorConsole.WriteLine();
  228 + if (listheader != null) { ColorConsole.WriteLine(listheader); }
228 var i = 1; 229 var i = 1;
229 ColorConsole.SetCursorPosition(0, ColorConsole.CursorTop); 230 ColorConsole.SetCursorPosition(0, ColorConsole.CursorTop);
230 MenuItemIndentWidth = SetMenuItemHeaderWidth(MenuItemList, columns); 231 MenuItemIndentWidth = SetMenuItemHeaderWidth(MenuItemList, columns);
Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs
@@ -34,35 +34,142 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -34,35 +34,142 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
34 public static object Execute(object o1 = null, object o2 = null) 34 public static object Execute(object o1 = null, object o2 = null)
35 { 35 {
36 var args = (o1 as Menu.ExecutorParameter).Args; 36 var args = (o1 as Menu.ExecutorParameter).Args;
  37 + var config = new WindowsServiceManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU");
  38 + var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES);
37 var functionkey = CommandLine.GetCommandLineArgument(args, CLP.CMD_FUNCTION); 39 var functionkey = CommandLine.GetCommandLineArgument(args, CLP.CMD_FUNCTION);
  40 + while (true) // servicegroup selection
  41 + {
  42 + List<WindowsServiceGroup> selectedServicegroups = null;
  43 + List<WindowsService> selectedServices = null;
  44 + string selectedFunctionkey = null;
38 45
39 - var config = new WindowsServiceManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU");  
40 - var ep = new Menu.ExecutorParameter(config, args);  
41 - var menufunctions = new Menu("Manage Windows Services", "Select the management function!")  
42 - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Register.KEY, "Register", Register,ep))  
43 - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Unregister.KEY, "Unregister", Unregister, ep))  
44 - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Start.KEY, "Start", Start, ep))  
45 - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Stop.KEY, "Stop", Stop, ep))  
46 - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Kill.KEY, "Kill", Kill, ep))  
47 - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Purge.KEY, "Purge", Purge, ep))  
48 - .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.SetUserAccount.KEY, "Set user account", SetUserAccount, ep))  
49 - .SetSelectionMode(Menu.SelectionMode.Single)  
50 - .SetMenuHeaderDisplayer(ServiceListDisplayer);  
51 - menufunctions.ExecuteMenu(functionkey); 46 + if (!ColorConsole.SilentMode)
  47 + {
  48 + var menuservicegroups = DisplayWindowsServiceGroupMenu(config, $"Select the windows service group(s) to manage!");
  49 + menuservicegroups.AddMenuItem(new Menu.ItemSeparator());
  50 + menuservicegroups.AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Purge.KEY, "Purge"));
  51 + menuservicegroups.AddMenuItem(new Menu.ItemSeparator());
  52 +
  53 + menuservicegroups.DisplayTitle();
  54 + menuservicegroups.DisplayItems(1);
  55 + Menu.Selection srg = menuservicegroups.Select(selectedserviceindexes);
  56 + if (srg.Result == Menu.SelectionResult.Exit) { break; }
  57 + else if (srg.Result == Menu.SelectionResult.None) { break; }
  58 + else if (srg.Result == Menu.SelectionResult.Error) { break; }
  59 + else if (srg.Result == Menu.SelectionResult.Ok) { }
  60 + else { }
  61 + if (srg.SelectedKeyList.Contains(CLP.Module.WindowsServiceManager.Function.Purge.KEY) && srg.SelectedKeyList.Count()>1) { continue; }
  62 + if (srg.SelectedKeyList.Contains(CLP.Module.WindowsServiceManager.Function.Purge.KEY)) { Purge(); continue; }
  63 + selectedServicegroups = srg.SelectedParameterList.Select(p => (p.Parameters as WindowsServiceGroup)).ToList();
  64 + }
  65 +
  66 + while (true) //service and function selection
  67 + {
  68 + var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage!", selectedServicegroups);
  69 + //menuservices.DisplayTitle();
  70 + menuservices.DisplayItems(1, listheader: selectedServicegroups == null ? null : "Services for groups: " + string.Join(",", selectedServicegroups.Select(wsg => $"{wsg.Xml_Description} ({wsg.Xml_Key})")));
  71 + Menu.Selection sr = menuservices.Select(selectedserviceindexes);
  72 + if (sr.Result == Menu.SelectionResult.Exit) { break; }
  73 + else if (sr.Result == Menu.SelectionResult.None) { break; }
  74 + else if (sr.Result == Menu.SelectionResult.Error) { break; }
  75 + else if (sr.Result == Menu.SelectionResult.Ok) { }
  76 + else { }
  77 + selectedServices = sr.SelectedParameterList.Select(p => (p.Parameters as WindowsService)).ToList();
  78 +
  79 + var menufunctions = new Menu("Manage Windows Services", "Select the management function!")
  80 + .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Register.KEY, "Register"))
  81 + .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Unregister.KEY, "Unregister"))
  82 + .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Start.KEY, "Start"))
  83 + .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Stop.KEY, "Stop"))
  84 + .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.Kill.KEY, "Kill"))
  85 + .AddMenuItem(new Menu.Item(CLP.Module.WindowsServiceManager.Function.SetUserAccount.KEY, "Set user account"))
  86 + .SetSelectionMode(Menu.SelectionMode.Single)
  87 + ;
  88 + //menufunctions.DisplayTitle();
  89 + menufunctions.DisplayItems(1);
  90 + Menu.Selection srf = menufunctions.Select(functionkey);
  91 + if (srf.Result == Menu.SelectionResult.Exit) { break; }
  92 + else if (srf.Result == Menu.SelectionResult.None) { break; }
  93 + else if (srf.Result == Menu.SelectionResult.Error) { break; }
  94 + else if (srf.Result == Menu.SelectionResult.Ok) { }
  95 + else { }
  96 + selectedFunctionkey = srf.SelectedKeyList.First();
  97 +
  98 + switch (selectedFunctionkey)
  99 + {
  100 + case CLP.Module.WindowsServiceManager.Function.Register.KEY:
  101 + foreach (var ws in selectedServices)
  102 + {
  103 + try
  104 + {
  105 + var success = WindowsServiceManagerCore.Register(ws, selectedServices.Select(x => x.Name).ToList());
  106 + ColorConsole.WriteLine($"Service registered. Name:{ws.Name}", ConsoleColor.Green);
  107 + }
  108 + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }
  109 + }
  110 + break;
  111 + case CLP.Module.WindowsServiceManager.Function.Unregister.KEY:
  112 + foreach (var ws in selectedServices)
  113 + {
  114 + try
  115 + {
  116 + var success = WindowsServiceManagerCore.Unregister(ws);
  117 + ColorConsole.WriteLine($"Service unregistered. Name:{ws.Name}", ConsoleColor.Green);
  118 + }
  119 + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }
  120 + }
  121 + break;
  122 + case CLP.Module.WindowsServiceManager.Function.Start.KEY:
  123 + foreach (var ws in selectedServices)
  124 + {
  125 + try
  126 + {
  127 + var success = WindowsServiceManagerCore.Start(ws.Name, ws.Xml_StartTimeout);
  128 + ColorConsole.WriteLine($"Service started. Name:{ws.Name}", ConsoleColor.Green);
  129 + }
  130 + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }
  131 + }
  132 + break;
  133 + case CLP.Module.WindowsServiceManager.Function.Stop.KEY:
  134 + foreach (var ws in selectedServices)
  135 + {
  136 + try
  137 + {
  138 + var success = WindowsServiceManagerCore.Stop(ws.Name, ws.Xml_StopTimeout);
  139 + ColorConsole.WriteLine($"Service stopped. Name:{ws.Name}", ConsoleColor.Green);
  140 + }
  141 + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }
  142 + }
  143 + break;
  144 + case CLP.Module.WindowsServiceManager.Function.Kill.KEY:
  145 + foreach (var ws in selectedServices)
  146 + {
  147 + try
  148 + {
  149 + var success = WindowsServiceManagerCore.Kill(ws.Name);
  150 + ColorConsole.WriteLine($"Service killed. Name:{ws.Name}", ConsoleColor.Green);
  151 + }
  152 + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }
  153 + }
  154 + break;
  155 + case CLP.Module.WindowsServiceManager.Function.SetUserAccount.KEY: SetUserAccount(config, selectedserviceindexes); break;
  156 + case CLP.Module.WindowsServiceManager.Function.Purge.KEY: Purge(); break;
  157 + }
  158 + }
  159 + }
52 return null; 160 return null;
53 } 161 }
54 #endregion Execute 162 #endregion Execute
55 163
56 #region First level Executors with UI 164 #region First level Executors with UI
57 - private static object Purge(object parameter, object o) 165 + private static void Purge()
58 { 166 {
59 - var config = (parameter as Menu.ExecutorParameter).GetConfig<WindowsServiceManagerXmlProcessor>();  
60 while (true) 167 while (true)
61 { 168 {
62 ColorConsole.WriteLine($"Enter servicename mask to select from the result list (% and ? are wildchars)...", ConsoleColor.Yellow); 169 ColorConsole.WriteLine($"Enter servicename mask to select from the result list (% and ? are wildchars)...", ConsoleColor.Yellow);
63 ColorConsole.WriteLine($"...or enter service name directly (put an asterisk (*) before the name).", ConsoleColor.Yellow); 170 ColorConsole.WriteLine($"...or enter service name directly (put an asterisk (*) before the name).", ConsoleColor.Yellow);
64 var mask = ColorConsole.ReadLine($" ---> ", ConsoleColor.Yellow).ToUpper(); 171 var mask = ColorConsole.ReadLine($" ---> ", ConsoleColor.Yellow).ToUpper();
65 - if (mask == "EX") { return o; } 172 + if (mask == "EX") { return; }
66 else if (mask == "") { continue; } 173 else if (mask == "") { continue; }
67 174
68 if (mask.StartsWith("*") && mask.Length>=2) { DeleteOneService(mask.Substring(1)); } 175 if (mask.StartsWith("*") && mask.Length>=2) { DeleteOneService(mask.Substring(1)); }
@@ -86,12 +193,12 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -86,12 +193,12 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
86 { 193 {
87 foreach (var p in ms.SelectedParameterList) 194 foreach (var p in ms.SelectedParameterList)
88 { 195 {
89 - if (DeleteOneService((string)(p.Parameters))) { return o; } 196 + if (DeleteOneService((string)(p.Parameters))) { return; }
90 } 197 }
91 } 198 }
92 } 199 }
93 } 200 }
94 - return o; 201 + return;
95 } 202 }
96 private static bool DeleteOneService(string servicename) 203 private static bool DeleteOneService(string servicename)
97 { 204 {
@@ -111,150 +218,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -111,150 +218,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
111 } 218 }
112 return false; 219 return false;
113 } 220 }
114 - private static object Kill(object parameter, object o)  
115 - {  
116 - var config = (parameter as Menu.ExecutorParameter).GetConfig<WindowsServiceManagerXmlProcessor>();  
117 - var args = (parameter as Menu.ExecutorParameter).Args;  
118 -  
119 - var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES);  
120 -  
121 - var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(Kill)}'!", silent: true);  
122 -  
123 - Menu.Selection sr = menuservices.Select(selectedserviceindexes);  
124 - if (sr.Result == Menu.SelectionResult.Exit) { return o; }  
125 - else if (sr.Result == Menu.SelectionResult.None) { return o; }  
126 - else if (sr.Result == Menu.SelectionResult.Error) { return o; }  
127 - else if (sr.Result == Menu.SelectionResult.Ok) { }  
128 - else { }  
129 - foreach (var p in sr.SelectedParameterList)  
130 - {  
131 - WindowsService ws = p.Parameters as WindowsService;  
132 - try  
133 - {  
134 - var success = WindowsServiceManagerCore.Kill(ws.Name);  
135 - ColorConsole.WriteLine($"Service killed. Name:{ws.Name}", ConsoleColor.Green);  
136 - }  
137 - catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }  
138 - }  
139 - return o;  
140 - }  
141 - private static object Register(object parameter, object o)  
142 - {  
143 - var config = (parameter as Menu.ExecutorParameter).GetConfig<WindowsServiceManagerXmlProcessor>();  
144 - var args = (parameter as Menu.ExecutorParameter).Args;  
145 -  
146 - var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES);  
147 -  
148 - var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(Register)}'!", silent: true);  
149 -  
150 - Menu.Selection sr = menuservices.Select(selectedserviceindexes);  
151 - if (sr.Result == Menu.SelectionResult.Exit) { return o; }  
152 - else if (sr.Result == Menu.SelectionResult.None) { return o; }  
153 - else if (sr.Result == Menu.SelectionResult.Error) { return o; }  
154 - else if (sr.Result == Menu.SelectionResult.Ok) { }  
155 - else { }  
156 - foreach (var p in sr.SelectedParameterList)  
157 - {  
158 - WindowsService ws = p.Parameters as WindowsService;  
159 - try  
160 - {  
161 - var success = WindowsServiceManagerCore.Register(ws, sr.SelectedParameterList.Select(x => (x.Parameters as WindowsService).Name).ToList());  
162 - ColorConsole.WriteLine($"Service registered. Name:{ws.Name}", ConsoleColor.Green);  
163 - }  
164 - catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }  
165 - }  
166 - return o;  
167 - }  
168 - private static object Unregister(object parameter, object o)  
169 - {  
170 - var config = (parameter as Menu.ExecutorParameter).GetConfig<WindowsServiceManagerXmlProcessor>();  
171 - var args = (parameter as Menu.ExecutorParameter).Args;  
172 - var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES);  
173 -  
174 - var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(Unregister)}'!", silent: true);  
175 -  
176 - Menu.Selection sr = menuservices.Select(selectedserviceindexes);  
177 - if (sr.Result == Menu.SelectionResult.Exit) { return o; }  
178 - else if (sr.Result == Menu.SelectionResult.None) { return o; }  
179 - else if (sr.Result == Menu.SelectionResult.Error) { return o; }  
180 - else if (sr.Result == Menu.SelectionResult.Ok) { }  
181 - else { }  
182 - foreach (var p in sr.SelectedParameterList)  
183 - {  
184 - WindowsService ws = p.Parameters as WindowsService;  
185 - try  
186 - {  
187 - var success = WindowsServiceManagerCore.Unregister(ws);  
188 - ColorConsole.WriteLine($"Service unregistered. Name:{ws.Name}", ConsoleColor.Green);  
189 - }  
190 - catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }  
191 - }  
192 - return o;  
193 - }  
194 - private static object Start(object parameter, object o)  
195 - {  
196 - var config = (parameter as Menu.ExecutorParameter).GetConfig<WindowsServiceManagerXmlProcessor>();  
197 - var args = (parameter as Menu.ExecutorParameter).Args;  
198 - var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES);  
199 -  
200 - var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(Start)}'!", silent: true);  
201 -  
202 - Menu.Selection sr = menuservices.Select(selectedserviceindexes);  
203 - if (sr.Result == Menu.SelectionResult.Exit) { return o; }  
204 - else if (sr.Result == Menu.SelectionResult.None) { return o; }  
205 - else if (sr.Result == Menu.SelectionResult.Error) { return o; }  
206 - else if (sr.Result == Menu.SelectionResult.Ok) { }  
207 - else { }  
208 - foreach (var p in sr.SelectedParameterList)  
209 - {  
210 - WindowsService ws = p.Parameters as WindowsService;  
211 - try  
212 - {  
213 - var success = WindowsServiceManagerCore.Start(ws.Name, ws.Xml_StartTimeout);  
214 - ColorConsole.WriteLine($"Service started. Name:{ws.Name}", ConsoleColor.Green);  
215 - }  
216 - catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }  
217 - }  
218 - return o;  
219 - }  
220 - private static object Stop(object parameter, object o)  
221 - {  
222 - var config = (parameter as Menu.ExecutorParameter).GetConfig<WindowsServiceManagerXmlProcessor>();  
223 - var args = (parameter as Menu.ExecutorParameter).Args;  
224 - var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES);  
225 -  
226 - var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(Stop)}'!", silent: true);  
227 -  
228 - Menu.Selection sr = menuservices.Select(selectedserviceindexes);  
229 - if (sr.Result == Menu.SelectionResult.Exit) { return o; }  
230 - else if (sr.Result == Menu.SelectionResult.None) { return o; }  
231 - else if (sr.Result == Menu.SelectionResult.Error) { return o; }  
232 - else if (sr.Result == Menu.SelectionResult.Ok) { }  
233 - else { }  
234 - foreach (var p in sr.SelectedParameterList)  
235 - {  
236 - WindowsService ws = p.Parameters as WindowsService;  
237 - try  
238 - {  
239 - var success = WindowsServiceManagerCore.Stop(ws.Name, ws.Xml_StopTimeout);  
240 - ColorConsole.WriteLine($"Service stopped. Name:{ws.Name}", ConsoleColor.Green);  
241 - }  
242 - catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }  
243 - }  
244 - return o;  
245 - }  
246 - private static object SetUserAccount(object parameter, object o) 221 + private static void SetUserAccount(WindowsServiceManagerXmlProcessor config, string selectedserviceindexes)
247 { 222 {
248 - var config = (parameter as Menu.ExecutorParameter).GetConfig<WindowsServiceManagerXmlProcessor>();  
249 - var args = (parameter as Menu.ExecutorParameter).Args;  
250 - var selectedserviceindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WindowsServiceManager.Function.CMD_SERVICES);  
251 -  
252 - var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(SetUserAccount)}'!", silent: true); 223 + var menuservices = DisplayWindowsServiceMenu(config, $"Select the windows service(es) to manage with function '{nameof(SetUserAccount)}'!");
253 224
254 Menu.Selection sr = menuservices.Select(selectedserviceindexes); 225 Menu.Selection sr = menuservices.Select(selectedserviceindexes);
255 - if (sr.Result == Menu.SelectionResult.Exit) { return o; }  
256 - else if (sr.Result == Menu.SelectionResult.None) { return o; }  
257 - else if (sr.Result == Menu.SelectionResult.Error) { return o; } 226 + if (sr.Result == Menu.SelectionResult.Exit) { return; }
  227 + else if (sr.Result == Menu.SelectionResult.None) { return; }
  228 + else if (sr.Result == Menu.SelectionResult.Error) { return; }
258 else if (sr.Result == Menu.SelectionResult.Ok) { } 229 else if (sr.Result == Menu.SelectionResult.Ok) { }
259 else { } 230 else { }
260 231
@@ -269,7 +240,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -269,7 +240,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
269 if (username == null) 240 if (username == null)
270 { 241 {
271 GetUsernameAndPassword(wmiService,ws,out username, out password); 242 GetUsernameAndPassword(wmiService,ws,out username, out password);
272 - if (username == "EX" || password == "EX") { return null; } 243 + if (username == "EX" || password == "EX") { return; }
273 } 244 }
274 if (WindowsServiceManagerCore.SetUserAccount(wmiService, username, password)) { ColorConsole.WriteLine($"Service user account changed. Name:{ws.Name}", ConsoleColor.Green); } 245 if (WindowsServiceManagerCore.SetUserAccount(wmiService, username, password)) { ColorConsole.WriteLine($"Service user account changed. Name:{ws.Name}", ConsoleColor.Green); }
275 else { ColorConsole.WriteLine($"Service user account change FAILED! Name:{ws.Name}", ConsoleColor.Red); } 246 else { ColorConsole.WriteLine($"Service user account change FAILED! Name:{ws.Name}", ConsoleColor.Red); }
@@ -277,36 +248,46 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -277,36 +248,46 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
277 } 248 }
278 catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } 249 catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }
279 } 250 }
280 - return o; 251 + return;
281 } 252 }
282 #endregion First level Executors with UI 253 #endregion First level Executors with UI
283 254
284 #region DisplayServices 255 #region DisplayServices
285 private static void ServiceListDisplayer() { DisplayWindowsServiceMenu(); } 256 private static void ServiceListDisplayer() { DisplayWindowsServiceMenu(); }
286 - public static Menu DisplayWindowsServiceMenu(WindowsServiceManagerXmlProcessor config=null,string prompt = null,bool silent=false) 257 + public static Menu DisplayWindowsServiceMenu(WindowsServiceManagerXmlProcessor config=null,string prompt = null,List<WindowsServiceGroup> servicegroups=null)
287 { 258 {
288 if (config==null) { config = new WindowsServiceManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); } 259 if (config==null) { config = new WindowsServiceManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); }
289 var menuservices = new Menu("Windows services",prompt) 260 var menuservices = new Menu("Windows services",prompt)
290 .SetMenuItemDisplayer(DisplayServiceInfo) 261 .SetMenuItemDisplayer(DisplayServiceInfo)
291 - .SetSelectionMode(Menu.SelectionMode.Multi); 262 + .SetSelectionMode(Menu.SelectionMode.Multi)
  263 + .SetMenuHeaderDisplayer(ServiceListDisplayer)
  264 + ;
292 menuservices.ClearMenuItemList(); 265 menuservices.ClearMenuItemList();
293 266
294 - List<WindowsServiceGroup> wsgdefList = config.GetWindowsServiceGroupDefinitionList();  
295 - foreach (var wsgdef in wsgdefList)  
296 - {  
297 - string menuitemtext = wsgdef.Xml_Description + "(" + string.Join(",", wsgdef.Xml_WindowsServiceKeyList) + ")";  
298 - menuservices.AddMenuItem(new Menu.ItemGroup(wsgdef.Xml_Key, menuitemtext, wsgdef.Xml_WindowsServiceKeyList));  
299 - }  
300 -  
301 - menuservices.AddMenuItem(new Menu.ItemSeparator());// separator  
302 -  
303 - List<WindowsService> wsdefList = config.GetWindowsServiceDefinitionList(); 267 + List<WindowsService> wsdefList = config.GetWindowsServiceDefinitionList(servicegroups);
304 foreach (var wsdef in wsdefList) 268 foreach (var wsdef in wsdefList)
305 { 269 {
306 menuservices.AddMenuItem(new Menu.Item(wsdef.Xml_Key, null, null, new Menu.ExecutorParameter(pars: wsdef.CollectWindowsServiceInfo()))); 270 menuservices.AddMenuItem(new Menu.Item(wsdef.Xml_Key, null, null, new Menu.ExecutorParameter(pars: wsdef.CollectWindowsServiceInfo())));
307 - } 271 + }
  272 + return menuservices;
  273 + }
  274 + public static Menu DisplayWindowsServiceGroupMenu(WindowsServiceManagerXmlProcessor config = null, string prompt = null)
  275 + {
  276 + if (config == null) { config = new WindowsServiceManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); }
  277 + var menuservices = new Menu("Windows services", prompt)
  278 + .SetMenuItemDisplayer(DisplayServiceInfo)
  279 + .SetSelectionMode(Menu.SelectionMode.Single)
  280 + .SetMenuHeaderDisplayer(ServiceListDisplayer)
  281 + ;
  282 + menuservices.ClearMenuItemList();
308 283
309 - if (!silent) { menuservices.DisplayItems(1); } 284 + List<WindowsServiceGroup> wsgdefList = config.GetWindowsServiceGroupDefinitionList();
  285 + foreach (var wsgdef in wsgdefList)
  286 + {
  287 + //string menuitemtext = wsgdef.Xml_Description + "(" + string.Join(",", wsgdef.Xml_WindowsServiceKeyList) + ")";
  288 + string menuitemtext = wsgdef.Xml_Description;
  289 + menuservices.AddMenuItem(new Menu.Item(wsgdef.Xml_Key, menuitemtext, null, new Menu.ExecutorParameter(pars: wsgdef)));
  290 + }
310 return menuservices; 291 return menuservices;
311 } 292 }
312 #endregion DisplayServices 293 #endregion DisplayServices
@@ -320,7 +301,10 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -320,7 +301,10 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
320 if (lineix == 0) 301 if (lineix == 0)
321 { 302 {
322 ColorConsole.Write($"{ws.Description}", ConsoleColor.Black, ConsoleColor.White); 303 ColorConsole.Write($"{ws.Description}", ConsoleColor.Black, ConsoleColor.White);
323 - ColorConsole.WriteLine($"{ws.DisplayName}", bracket: "()"); 304 + ColorConsole.Write($"{ws.DisplayName}", bracket: "()");
  305 + ColorConsole.Write($", User:");
  306 + ColorConsole.Write($"{ws.StartName}", ConsoleColor.White);
  307 + ColorConsole.WriteLine();
324 return ws.DisplayName+ws.Description; 308 return ws.DisplayName+ws.Description;
325 } 309 }
326 else if (lineix == 1) 310 else if (lineix == 1)
@@ -374,12 +358,6 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -374,12 +358,6 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
374 } 358 }
375 else if (lineix == 4) 359 else if (lineix == 4)
376 { 360 {
377 - ColorConsole.Write($"User:");  
378 - ColorConsole.WriteLine($"{ws.StartName}", ConsoleColor.White);  
379 - return ws.StartName;  
380 - }  
381 - else if (lineix == 5)  
382 - {  
383 ColorConsole.WriteLine(); 361 ColorConsole.WriteLine();
384 return " "; 362 return " ";
385 } 363 }
@@ -728,11 +706,31 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS @@ -728,11 +706,31 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS
728 #region GetWindowsServiceGroupDefinitionList 706 #region GetWindowsServiceGroupDefinitionList
729 public WindowsServiceGroup GetWindowsServiceGroup(string key) { return _winservicegrouplist.FirstOrDefault(x => x.Xml_Key == key); } 707 public WindowsServiceGroup GetWindowsServiceGroup(string key) { return _winservicegrouplist.FirstOrDefault(x => x.Xml_Key == key); }
730 public List<WindowsServiceGroup> GetWindowsServiceGroupDefinitionList() { return _winservicegrouplist; } 708 public List<WindowsServiceGroup> GetWindowsServiceGroupDefinitionList() { return _winservicegrouplist; }
  709 +
  710 +
  711 + public List<string> GetGroupWindowsServiceKeyList(string groupkey,out string groupdescription)
  712 + {
  713 + groupdescription = null;
  714 + List<WindowsServiceGroup> wsgdefList = GetWindowsServiceGroupDefinitionList().Where(sgr => sgr.Xml_Key == groupkey || groupkey == null).ToList();
  715 + if (groupkey != null && wsgdefList != null && wsgdefList.Any()) { groupdescription = wsgdefList.First().Xml_Description; }
  716 + List<string> allwskeys = new List<string>();
  717 + foreach (var wsg in wsgdefList) { allwskeys = allwskeys.Concat(wsg.Xml_WindowsServiceKeyList).ToList(); }
  718 + return allwskeys;
  719 + }
731 #endregion GetWindowsServiceGroupDefinitionList 720 #endregion GetWindowsServiceGroupDefinitionList
732 721
733 #region GetWindowsServiceDefinitionList 722 #region GetWindowsServiceDefinitionList
734 public WindowsService GetWindowsService(string key) { return _winservicelist.FirstOrDefault(x => x.Xml_Key == key); } 723 public WindowsService GetWindowsService(string key) { return _winservicelist.FirstOrDefault(x => x.Xml_Key == key); }
735 - public List<WindowsService> GetWindowsServiceDefinitionList() { return _winservicelist; } 724 + public List<WindowsService> GetWindowsServiceDefinitionList(List<WindowsServiceGroup> wsgList=null)
  725 + {
  726 + if (wsgList == null) { return _winservicelist; }
  727 + else
  728 + {
  729 + var wsList = new List<WindowsService>();
  730 + 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(); }
  731 + return wsList;
  732 + }
  733 + }
736 public List<WindowsService> GetWindowsServiceDefinitionListInStartOrder() { return _winservicelistinstartorder; } 734 public List<WindowsService> GetWindowsServiceDefinitionListInStartOrder() { return _winservicelistinstartorder; }
737 public List<WindowsService> GetWindowsServiceDefinitionListInStopOrder() { return _winservicelistinstoporder; } 735 public List<WindowsService> GetWindowsServiceDefinitionListInStopOrder() { return _winservicelistinstoporder; }
738 private List<WindowsService> ProduceWindowsServiceDefinitionListInStartOrder() 736 private List<WindowsService> ProduceWindowsServiceDefinitionListInStartOrder()
Vrh.Log4Pro.MaintenanceConsole/Program.cs
@@ -70,7 +70,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole @@ -70,7 +70,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole
70 var forcedmodulekey = CommandLine.GetCommandLineArgument(args, CLP.CMD_MODULE); 70 var forcedmodulekey = CommandLine.GetCommandLineArgument(args, CLP.CMD_MODULE);
71 var commandmode = !string.IsNullOrEmpty(forcedmodulekey); 71 var commandmode = !string.IsNullOrEmpty(forcedmodulekey);
72 var silentmode = commandmode && !string.IsNullOrEmpty(CommandLine.GetCommandLineArgument(args, CLP.CMD_SILENT, switchtype: true)); 72 var silentmode = commandmode && !string.IsNullOrEmpty(CommandLine.GetCommandLineArgument(args, CLP.CMD_SILENT, switchtype: true));
73 - ColorConsole.SetSilentMode(silentmode); 73 + ColorConsole.SilentMode=silentmode;
74 Menu.SetCommandMode(commandmode); 74 Menu.SetCommandMode(commandmode);
75 75
76 var appconfigpath = CommandLine.GetCommandLineArgument(args, CLP.CMD_APPCONFIG); 76 var appconfigpath = CommandLine.GetCommandLineArgument(args, CLP.CMD_APPCONFIG);
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices; @@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
32 // You can specify all the values or you can default the Build and Revision Numbers 32 // You can specify all the values or you can default the Build and Revision Numbers
33 // by using the '*' as shown below: 33 // by using the '*' as shown below:
34 // [assembly: AssemblyVersion("1.0.*")] 34 // [assembly: AssemblyVersion("1.0.*")]
35 -[assembly: AssemblyVersion("1.8.4.0")]  
36 -[assembly: AssemblyFileVersion("1.8.4.0")] 35 +[assembly: AssemblyVersion("1.8.5.0")]
  36 +[assembly: AssemblyFileVersion("1.8.5.0")]