Commit 37bf94ab2d820576a60b67904ab112779a12a4ec
1 parent
e76b5118
command mode kialakítása és beillesztése - egyenlőre csak - a ScheduledTaskManager modulba
Showing
14 changed files
with
1033 additions
and
151 deletions
Show diff stats
Vrh.Log4Pro.MaintenanceConsole/App.config
1 | <?xml version="1.0" encoding="utf-8"?> | 1 | <?xml version="1.0" encoding="utf-8"?> |
2 | <configuration> | 2 | <configuration> |
3 | <configSections> | 3 | <configSections> |
4 | - <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> | ||
5 | - <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> | ||
6 | - </configSections> | 4 | + <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> |
5 | + <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> | ||
6 | + </configSections> | ||
7 | <startup> | 7 | <startup> |
8 | <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" /> | 8 | <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" /> |
9 | </startup> | 9 | </startup> |
Vrh.Log4Pro.MaintenanceConsole/Config.xml
@@ -187,4 +187,14 @@ | @@ -187,4 +187,14 @@ | ||
187 | <FolderToClean Directory="@DIR_BAKTMP@" Recurse="True" RemoveEmptyFolder="False" IncludeMask="*.*" /> | 187 | <FolderToClean Directory="@DIR_BAKTMP@" Recurse="True" RemoveEmptyFolder="False" IncludeMask="*.*" /> |
188 | </FileCleaner> | 188 | </FileCleaner> |
189 | 189 | ||
190 | + <ScheduledTasks> | ||
191 | + <ScheduledTask Name="CP_Archive_WEEKLY" Priority="7" Schedule="WEEKLY" StartTime="04:00" Enable="true" Run="false" Commandname="sc.exe" /> | ||
192 | + <ScheduledTask Name="CP_Archive_MONTHLY" Priority="7" Schedule="MONTHLY" StartTime="04:00" Enable="true" Run="false" Commandname="sc.exe" /> | ||
193 | + <ScheduledTask Name="CP_Archive_DAILY" Priority="7" Schedule="DAILY" StartTime="04:00" Enable="true" Run="false" Commandname="sc.exe" /> | ||
194 | + <ScheduledTask Name="CP_Backup_DAILY" Priority="7" Schedule="DAILY" StartTime="04:20" Enable="true" Run="false" Commandname="sc.exe" /> | ||
195 | + <ScheduledTask Name="CP_Backup_HOURLY" Priority="7" Schedule="HOURLY" StartTime="04:00" Enable="false" Run="false" Commandname="sc.exe" /> | ||
196 | + <ScheduledTask Name="CP_BackupDBOnly_DAILY" Priority="7" Schedule="DAILY" StartTime="04:40" Enable="true" Run="false" Commandname="sc.exe" /> | ||
197 | + <ScheduledTask Name="CP_PurgeFiles_DAILY" Priority="7" Schedule="DAILY" StartTime="05:00" Enable="true" Run="false" Commandname="sc.exe" /> | ||
198 | + </ScheduledTasks> | ||
199 | + | ||
190 | </Configuration> | 200 | </Configuration> |
191 | \ No newline at end of file | 201 | \ No newline at end of file |
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs
@@ -16,6 +16,36 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -16,6 +16,36 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
16 | #region ColorConsole | 16 | #region ColorConsole |
17 | public static class ColorConsole | 17 | public static class ColorConsole |
18 | { | 18 | { |
19 | + private static bool silentMode = false; | ||
20 | + private static string[] readlineList = null; | ||
21 | + | ||
22 | + /// Üzenet és utána Billentyűzet lenyomásra vár | ||
23 | + /// </summary> | ||
24 | + /// <param name="text"></param> | ||
25 | + /// <returns></returns> | ||
26 | + public static ConsoleKeyInfo PressAnykeyToContinue(string text = null) | ||
27 | + { | ||
28 | + ColorConsole.WriteLine(text ?? "Press any key to continue...", ConsoleColor.Yellow); return ColorConsole.ReadKey(); | ||
29 | + } | ||
30 | + | ||
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> | ||
39 | + /// 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 | ||
41 | + /// </summary> | ||
42 | + /// <param name="readlinelist"></param> | ||
43 | + public static void SetReadLineList(string[] readlinelist) { readlineList = readlinelist; } | ||
44 | + /// <summary> | ||
45 | + /// A megadott stringet szóközökkel ritkított formában adja vissza | ||
46 | + /// </summary> | ||
47 | + /// <param name="txt"></param> | ||
48 | + /// <returns></returns> | ||
19 | public static string WideString(string txt) | 49 | public static string WideString(string txt) |
20 | { | 50 | { |
21 | if (txt == null) { return null; }; | 51 | if (txt == null) { return null; }; |
@@ -25,18 +55,116 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -25,18 +55,116 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
25 | return widetxt.Substring(0, widetxt.Length - 1); | 55 | return widetxt.Substring(0, widetxt.Length - 1); |
26 | } | 56 | } |
27 | 57 | ||
58 | + /// <summary> | ||
59 | + /// true, ha van lenyomott billentyű, illetve command mode-ban mindig false | ||
60 | + /// </summary> | ||
61 | + public static bool KeyAvailable { get { if (silentMode) { return false; } else { return Console.KeyAvailable; } } } | ||
62 | + | ||
63 | + | ||
64 | + /// <summary> | ||
65 | + /// Beállítja a console ablak méretét | ||
66 | + /// </summary> | ||
67 | + /// <param name="w"></param> | ||
68 | + /// <param name="h"></param> | ||
69 | + public static void SetWindowSize(int w, int h) { if (!silentMode) { Console.SetWindowSize(w, h); } } | ||
70 | + | ||
71 | + /// <summary> | ||
72 | + /// Visszaadja a lenyomott billentyűt, ha van, commandmode-ban pedig az enter-t | ||
73 | + /// </summary> | ||
74 | + /// <returns></returns> | ||
75 | + public static ConsoleKeyInfo ReadKey() | ||
76 | + { | ||
77 | + if (silentMode) { return GetConsoleKey(ConsoleKey.Enter); } | ||
78 | + else { return Console.ReadKey(); } | ||
79 | + } | ||
80 | + | ||
81 | + /// <summary> | ||
82 | + /// Visszaadja a lenyomott billentyűt, ha van, commandmode-ban pedig az enter-t | ||
83 | + /// </summary> | ||
84 | + /// <returns></returns> | ||
85 | + public static ConsoleKeyInfo GetConsoleKey(ConsoleKey ck, bool shift = false, bool alt=false,bool control=false) | ||
86 | + { | ||
87 | + switch (ck) | ||
88 | + { | ||
89 | + case ConsoleKey.Enter: | ||
90 | + default: | ||
91 | + return new ConsoleKeyInfo(keyChar: '\r', key: ConsoleKey.Enter, shift: shift, alt: alt, control: control); | ||
92 | + } | ||
93 | + } | ||
94 | + | ||
95 | + /// <summary> | ||
96 | + /// Beolvas egy sort a consolról, vagy commandmode-ban a bufferból | ||
97 | + /// </summary> | ||
98 | + /// <param name="text"></param> | ||
99 | + /// <param name="f"></param> | ||
100 | + /// <param name="b"></param> | ||
101 | + /// <param name="bracket"></param> | ||
102 | + /// <param name="prefix"></param> | ||
103 | + /// <returns></returns> | ||
28 | public static string ReadLine(string text = null, ConsoleColor? f = null, ConsoleColor? b = null, string bracket = null, string prefix = "") | 104 | public static string ReadLine(string text = null, ConsoleColor? f = null, ConsoleColor? b = null, string bracket = null, string prefix = "") |
29 | { | 105 | { |
30 | - Write(text, f, b,bracket,prefix); | ||
31 | - return Console.ReadLine(); | 106 | + if (silentMode) |
107 | + { | ||
108 | + if (readlineList == null || readlineList.Length == 0) { return null; } | ||
109 | + else | ||
110 | + { | ||
111 | + var nextreadline = readlineList[0]; | ||
112 | + readlineList = readlineList.Skip(1).ToArray(); | ||
113 | + return nextreadline; | ||
114 | + } | ||
115 | + } | ||
116 | + else | ||
117 | + { | ||
118 | + Write(text, f, b, bracket, prefix); | ||
119 | + return Console.ReadLine(); | ||
120 | + } | ||
121 | + } | ||
122 | + | ||
123 | + /// <summary> | ||
124 | + /// beállítja a cursor pozíciót | ||
125 | + /// </summary> | ||
126 | + /// <param name="remembercursorleft"></param> | ||
127 | + /// <param name="remembercursortop"></param> | ||
128 | + public static void SetCursorPosition(int remembercursorleft, int remembercursortop) | ||
129 | + { | ||
130 | + if (silentMode) { return; } | ||
131 | + Console.SetCursorPosition(remembercursorleft, remembercursortop); | ||
32 | } | 132 | } |
133 | + | ||
134 | + public static int CursorLeft { get { return Console.CursorLeft; } } | ||
135 | + public static int CursorTop { get { return Console.CursorTop; } } | ||
136 | + | ||
137 | + public static void Clear() { Console.Clear(); } | ||
138 | + | ||
139 | + /// <summary> | ||
140 | + /// Kiír egy karaktersorozatot színesben a konzolra soremeléssel; | ||
141 | + /// command mode-ban nem csinál semmit | ||
142 | + /// </summary> | ||
143 | + /// <param name="text"></param> | ||
144 | + /// <param name="f"></param> | ||
145 | + /// <param name="b"></param> | ||
146 | + /// <param name="bracket"></param> | ||
147 | + /// <param name="prefix"></param> | ||
148 | + /// <param name="suffix"></param> | ||
33 | public static void WriteLine(string text = null, ConsoleColor? f = null, ConsoleColor? b = null, string bracket = null,string prefix="", string suffix = "") | 149 | public static void WriteLine(string text = null, ConsoleColor? f = null, ConsoleColor? b = null, string bracket = null,string prefix="", string suffix = "") |
34 | { | 150 | { |
151 | + if (silentMode) { return; } | ||
35 | Write(text, f, b, bracket,prefix,suffix); | 152 | Write(text, f, b, bracket,prefix,suffix); |
36 | Console.WriteLine(); | 153 | Console.WriteLine(); |
37 | } | 154 | } |
155 | + /// <summary> | ||
156 | + /// Kiír egy karaktersorozatot színesben a konzolra soremelés nélkül; | ||
157 | + /// command mode-ban nem csinál semmit | ||
158 | + /// </summary> | ||
159 | + /// <param name="text"></param> | ||
160 | + /// <param name="f"></param> | ||
161 | + /// <param name="b"></param> | ||
162 | + /// <param name="bracket"></param> | ||
163 | + /// <param name="prefix"></param> | ||
164 | + /// <param name="suffix"></param> | ||
38 | public static void Write(string text = null, ConsoleColor? f = null, ConsoleColor? b = null, string bracket = null, string prefix = "",string suffix="") | 165 | public static void Write(string text = null, ConsoleColor? f = null, ConsoleColor? b = null, string bracket = null, string prefix = "",string suffix="") |
39 | { | 166 | { |
167 | + if (silentMode) { return; } | ||
40 | if (!string.IsNullOrEmpty(prefix)) { Write(prefix); } | 168 | if (!string.IsNullOrEmpty(prefix)) { Write(prefix); } |
41 | if (!string.IsNullOrEmpty(bracket) && bracket.Length==1) { bracket = bracket + bracket; } | 169 | if (!string.IsNullOrEmpty(bracket) && bracket.Length==1) { bracket = bracket + bracket; } |
42 | if (!string.IsNullOrEmpty(bracket)) { Console.Write($"{bracket[0]}"); } | 170 | if (!string.IsNullOrEmpty(bracket)) { Console.Write($"{bracket[0]}"); } |
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - CommandLineParser.cs
@@ -135,8 +135,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -135,8 +135,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
135 | Test(44,"this \"is a\" test", new[] { "this", "is a", "test" }); | 135 | Test(44,"this \"is a\" test", new[] { "this", "is a", "test" }); |
136 | Test(45,"\"C:\\Program Files\"", new[] { "C:\\Program Files" }); | 136 | Test(45,"\"C:\\Program Files\"", new[] { "C:\\Program Files" }); |
137 | Test(46,"\"He whispered to her \\\"I love you\\\".\"", new[] { "He whispered to her \"I love you\"." }); | 137 | Test(46,"\"He whispered to her \\\"I love you\\\".\"", new[] { "He whispered to her \"I love you\"." }); |
138 | - Console.WriteLine("Press a key to continue...."); | ||
139 | - Console.ReadKey(); | 138 | + ColorConsole.WriteLine("Press a key to continue...."); |
139 | + ColorConsole.ReadKey(); | ||
140 | } | 140 | } |
141 | static void Test(int id,string cmd, string[] r) | 141 | static void Test(int id,string cmd, string[] r) |
142 | { | 142 | { |
@@ -149,28 +149,28 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -149,28 +149,28 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
149 | if (r.Length != sr.Length) | 149 | if (r.Length != sr.Length) |
150 | { | 150 | { |
151 | 151 | ||
152 | - Console.WriteLine($"ERROR:{id}"); | ||
153 | - Console.WriteLine($" cmdline : {cmd}"); | ||
154 | - Console.WriteLine($" splitted: {scmd}"); | ||
155 | - Console.WriteLine($" expected: {sexp}"); | 152 | + ColorConsole.WriteLine($"ERROR:{id}"); |
153 | + ColorConsole.WriteLine($" cmdline : {cmd}"); | ||
154 | + ColorConsole.WriteLine($" splitted: {scmd}"); | ||
155 | + ColorConsole.WriteLine($" expected: {sexp}"); | ||
156 | return; | 156 | return; |
157 | } | 157 | } |
158 | for (int i = 0; i < r.Length; i++) | 158 | for (int i = 0; i < r.Length; i++) |
159 | if (r[i] != sr[i]) | 159 | if (r[i] != sr[i]) |
160 | { | 160 | { |
161 | - Console.WriteLine($"ERROR:{id}"); | ||
162 | - Console.WriteLine($" cmdline : {cmd}"); | ||
163 | - Console.WriteLine($" splitted: {scmd}"); | ||
164 | - Console.WriteLine($" expected: {sexp}"); | 161 | + ColorConsole.WriteLine($"ERROR:{id}"); |
162 | + ColorConsole.WriteLine($" cmdline : {cmd}"); | ||
163 | + ColorConsole.WriteLine($" splitted: {scmd}"); | ||
164 | + ColorConsole.WriteLine($" expected: {sexp}"); | ||
165 | return; | 165 | return; |
166 | } | 166 | } |
167 | } | 167 | } |
168 | catch (Exception ex) | 168 | catch (Exception ex) |
169 | { | 169 | { |
170 | - Console.WriteLine($"EXCEP:{id}"); | ||
171 | - Console.WriteLine($" cmdline : {cmd}"); | ||
172 | - Console.WriteLine($" splitted: {scmd}"); | ||
173 | - Console.WriteLine($" expected: {sexp}"); | 170 | + ColorConsole.WriteLine($"EXCEP:{id}"); |
171 | + ColorConsole.WriteLine($" cmdline : {cmd}"); | ||
172 | + ColorConsole.WriteLine($" splitted: {scmd}"); | ||
173 | + ColorConsole.WriteLine($" expected: {sexp}"); | ||
174 | return; | 174 | return; |
175 | } | 175 | } |
176 | } | 176 | } |
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Menu.cs
@@ -11,11 +11,12 @@ using System.Management; | @@ -11,11 +11,12 @@ using System.Management; | ||
11 | using System.Diagnostics; | 11 | using System.Diagnostics; |
12 | 12 | ||
13 | using Vrh.XmlProcessing; | 13 | using Vrh.XmlProcessing; |
14 | +using VRH.Common; | ||
14 | using System.Xml.Linq; | 15 | using System.Xml.Linq; |
15 | 16 | ||
16 | namespace Vrh.Log4Pro.MaintenanceConsole | 17 | namespace Vrh.Log4Pro.MaintenanceConsole |
17 | { | 18 | { |
18 | - public class Menu | 19 | + public class Menu |
19 | { | 20 | { |
20 | public delegate Object MenuItemExecutorFunc(Object p, Object o); | 21 | public delegate Object MenuItemExecutorFunc(Object p, Object o); |
21 | public delegate Object MenuItemDisplayerFunc(Object p, int i); | 22 | public delegate Object MenuItemDisplayerFunc(Object p, int i); |
@@ -25,30 +26,71 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -25,30 +26,71 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
25 | private string Title { get { return ColorConsole.WideString(title); } set { title = value; } } | 26 | private string Title { get { return ColorConsole.WideString(title); } set { title = value; } } |
26 | private MenuItemDisplayerFunc MenuItemDisplayer; | 27 | private MenuItemDisplayerFunc MenuItemDisplayer; |
27 | private SelectionMode selectionMode = Menu.SelectionMode.Multi; | 28 | private SelectionMode selectionMode = Menu.SelectionMode.Multi; |
29 | + private static bool commandModeAllMenus = false; | ||
30 | + private bool commandMode = false; | ||
28 | private int HeaderWidth = 9; | 31 | private int HeaderWidth = 9; |
29 | private string SelectionPrompt = "Make Your selection!"; | 32 | private string SelectionPrompt = "Make Your selection!"; |
30 | #endregion private fields | 33 | #endregion private fields |
31 | 34 | ||
32 | #region public properties | 35 | #region public properties |
33 | public List<Item> MenuItemList { get; private set; } = new List<Item>(); | 36 | public List<Item> MenuItemList { get; private set; } = new List<Item>(); |
34 | - List<string> MenuKeyList { get { return MenuItemList.Where(x=> !x.Separator).Select(x => x.Key).ToList(); } } | 37 | + List<string> MenuKeyList { get { return MenuItemList.Where(x => !x.Separator).Select(x => x.Key).ToList(); } } |
35 | #endregion public properties | 38 | #endregion public properties |
36 | 39 | ||
37 | #region public tools | 40 | #region public tools |
41 | + | ||
42 | + /// <summary> | ||
43 | + /// Incorrect selection console üzenet megjelenítése | ||
44 | + /// </summary> | ||
45 | + /// <param name="partxt"></param> | ||
46 | + public static void IncorrectSelection(string partxt = "") | ||
47 | + { | ||
48 | + if (GetCommandModeAllMenus()) { return; } | ||
49 | + | ||
50 | + ColorConsole.WriteLine(); | ||
51 | + ColorConsole.WriteLine($"Incorrect selection! {partxt} Make a new selection!", ConsoleColor.Red); | ||
52 | + Menu.PressAnykeyToContinue(); | ||
53 | + } | ||
54 | + | ||
55 | + /// <summary> | ||
56 | + /// Üzenet és utána Billentyűzet lenyomásra vár | ||
57 | + /// </summary> | ||
58 | + /// <param name="text"></param> | ||
59 | + /// <returns></returns> | ||
60 | + public static ConsoleKeyInfo PressAnykeyToContinue(string text = null) | ||
61 | + { | ||
62 | + if (GetCommandModeAllMenus()) { return ColorConsole.GetConsoleKey(ConsoleKey.Enter); } | ||
63 | + | ||
64 | + ColorConsole.WriteLine(text ?? "Press any key to continue...", ConsoleColor.Yellow); return ColorConsole.ReadKey(); | ||
65 | + } | ||
66 | + | ||
67 | + | ||
68 | + public static void SetCommandModeAllMenus() { commandModeAllMenus = true; } | ||
69 | + | ||
38 | public Menu SetMenuItemDisplayer(MenuItemDisplayerFunc displayer) | 70 | public Menu SetMenuItemDisplayer(MenuItemDisplayerFunc displayer) |
39 | { | 71 | { |
40 | MenuItemDisplayer = displayer; | 72 | MenuItemDisplayer = displayer; |
41 | return this; | 73 | return this; |
42 | } | 74 | } |
43 | public Menu SetSelectionMode(SelectionMode sm) { selectionMode = sm; return this; } | 75 | public Menu SetSelectionMode(SelectionMode sm) { selectionMode = sm; return this; } |
44 | - public Menu SetHeaderWidth(int hw) { HeaderWidth= hw; return this; } | ||
45 | - public Menu AddMenuItem(Item mi) | ||
46 | - { | 76 | + public Menu SetCommandMode(bool commandmode = false) { commandMode = true; return this; } |
77 | + public static bool GetCommandModeAllMenus() { return commandModeAllMenus; } | ||
78 | + public bool GetCommandMode() { return commandMode || commandModeAllMenus; } | ||
79 | + public Menu SetHeaderWidth(int hw) { HeaderWidth = hw; return this; } | ||
80 | + public Menu AddMenuItem(Item mi) | ||
81 | + { | ||
47 | MenuItemList.Add(mi); | 82 | MenuItemList.Add(mi); |
48 | if (string.IsNullOrWhiteSpace(mi.Key)) { mi.Key = $"#$KEY{MenuItemList.IndexOf(mi)}"; } | 83 | if (string.IsNullOrWhiteSpace(mi.Key)) { mi.Key = $"#$KEY{MenuItemList.IndexOf(mi)}"; } |
49 | return this; | 84 | return this; |
50 | } | 85 | } |
51 | public void ClearMenuItemList() { MenuItemList.Clear(); } | 86 | public void ClearMenuItemList() { MenuItemList.Clear(); } |
87 | + public void ExecuteCmd(string[] args) | ||
88 | + { | ||
89 | + var module = CommandLine.GetCommandLineArgument(args, "-MODULE"); | ||
90 | + var sr = new Menu.Selection(module, args); | ||
91 | + ExecuteSelection(sr); | ||
92 | + } | ||
93 | + | ||
52 | public void ExecuteMenu() | 94 | public void ExecuteMenu() |
53 | { | 95 | { |
54 | try | 96 | try |
@@ -61,65 +103,69 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -61,65 +103,69 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
61 | if (sr.Result == Menu.SelectionResult.Exit) { return; } | 103 | if (sr.Result == Menu.SelectionResult.Exit) { return; } |
62 | else if (sr.Result == Menu.SelectionResult.None) { continue; } | 104 | else if (sr.Result == Menu.SelectionResult.None) { continue; } |
63 | else if (sr.Result == Menu.SelectionResult.Error) { continue; } | 105 | else if (sr.Result == Menu.SelectionResult.Error) { continue; } |
64 | - Execute(sr.SelectedKeyList); | 106 | + ExecuteSelection(sr.SelectedKeyList); |
65 | } | 107 | } |
66 | } | 108 | } |
67 | - catch (Exception ex) | ||
68 | - { | ||
69 | - ColorConsole.WriteLine(ex.Message,ConsoleColor.Red); | 109 | + catch (Exception ex) |
110 | + { | ||
111 | + ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); | ||
70 | if (ex.InnerException != null) { ColorConsole.WriteLine(ex.InnerException.Message, ConsoleColor.Red); } | 112 | if (ex.InnerException != null) { ColorConsole.WriteLine(ex.InnerException.Message, ConsoleColor.Red); } |
71 | - ColorConsole.WriteLine("Press any key to continue..."); | 113 | + Menu.PressAnykeyToContinue(); |
72 | } | 114 | } |
73 | } | 115 | } |
74 | public void DisplayTitle() | 116 | public void DisplayTitle() |
75 | { | 117 | { |
76 | - Console.Clear(); | 118 | + if (GetCommandMode()) { return; } |
119 | + | ||
120 | + ColorConsole.Clear(); | ||
77 | ColorConsole.WriteLine(Title, ConsoleColor.White); | 121 | ColorConsole.WriteLine(Title, ConsoleColor.White); |
78 | ColorConsole.WriteLine(new string('-', Title.Length)); | 122 | ColorConsole.WriteLine(new string('-', Title.Length)); |
79 | } | 123 | } |
80 | public void DisplayItems(int columns = 1, int columnlength = 0) | 124 | public void DisplayItems(int columns = 1, int columnlength = 0) |
81 | { | 125 | { |
126 | + if (GetCommandMode()) { return; } | ||
127 | + | ||
82 | int columncounter = 0; | 128 | int columncounter = 0; |
83 | ColorConsole.WriteLine(); | 129 | ColorConsole.WriteLine(); |
84 | var i = 1; | 130 | var i = 1; |
85 | - Console.SetCursorPosition(0, Console.CursorTop); | ||
86 | - foreach (var menuitem in MenuItemList) | 131 | + ColorConsole.SetCursorPosition(0, ColorConsole.CursorTop); |
132 | + foreach (var menuitem in MenuItemList) | ||
87 | { | 133 | { |
88 | if (menuitem.Separator && columns == 1) | 134 | if (menuitem.Separator && columns == 1) |
89 | { | 135 | { |
90 | - Console.SetCursorPosition(columnlength * columncounter + HeaderWidth, Console.CursorTop); | 136 | + ColorConsole.SetCursorPosition(columnlength * columncounter + HeaderWidth, ColorConsole.CursorTop); |
91 | var seplen = menuitem.SeparatorLength; | 137 | var seplen = menuitem.SeparatorLength; |
92 | - if (menuitem.SeparatorLength==0) | 138 | + if (menuitem.SeparatorLength == 0) |
93 | { | 139 | { |
94 | - foreach (var mi in MenuItemList.Where(x=>!x.Separator)) { if (mi.Text.Length > seplen) { seplen = mi.Text.Length; } } | 140 | + foreach (var mi in MenuItemList.Where(x => !x.Separator)) { if (mi.Text.Length > seplen) { seplen = mi.Text.Length; } } |
95 | } | 141 | } |
96 | ColorConsole.WriteLine(new string(menuitem.SeparatorChar, seplen)); | 142 | ColorConsole.WriteLine(new string(menuitem.SeparatorChar, seplen)); |
97 | continue; | 143 | continue; |
98 | } | 144 | } |
99 | ColorConsole.Write($"["); | 145 | ColorConsole.Write($"["); |
100 | ColorConsole.Write($"{i}"); | 146 | ColorConsole.Write($"{i}"); |
101 | - if (!string.IsNullOrEmpty(menuitem.Key) && !menuitem.Key.StartsWith("#$KEY")) | 147 | + if (!string.IsNullOrEmpty(menuitem.Key) && !menuitem.Key.StartsWith("#$KEY")) |
102 | { | 148 | { |
103 | ColorConsole.Write($":"); | 149 | ColorConsole.Write($":"); |
104 | ColorConsole.Write(menuitem.Key, ConsoleColor.Yellow); | 150 | ColorConsole.Write(menuitem.Key, ConsoleColor.Yellow); |
105 | } | 151 | } |
106 | ColorConsole.Write($"]"); | 152 | ColorConsole.Write($"]"); |
107 | - Console.SetCursorPosition(columnlength * columncounter+HeaderWidth, Console.CursorTop); | 153 | + ColorConsole.SetCursorPosition(columnlength * columncounter + HeaderWidth, ColorConsole.CursorTop); |
108 | 154 | ||
109 | if (!string.IsNullOrEmpty(menuitem.Text)) | 155 | if (!string.IsNullOrEmpty(menuitem.Text)) |
110 | { | 156 | { |
111 | - ColorConsole.Write(menuitem.Text); | 157 | + ColorConsole.Write(menuitem.Text); |
112 | } | 158 | } |
113 | if (columns == 1) | 159 | if (columns == 1) |
114 | { | 160 | { |
115 | if (!string.IsNullOrEmpty(menuitem.Text)) { ColorConsole.WriteLine(); } | 161 | if (!string.IsNullOrEmpty(menuitem.Text)) { ColorConsole.WriteLine(); } |
116 | - if (MenuItemDisplayer != null) | 162 | + if (MenuItemDisplayer != null) |
117 | { | 163 | { |
118 | - for (var li = 0; li < 100; li++) | ||
119 | - { | ||
120 | - if (li>0) { ColorConsole.Write(new string(' ',HeaderWidth)); } | 164 | + for (var li = 0; li < 100; li++) |
165 | + { | ||
166 | + if (li > 0) { ColorConsole.Write(new string(' ', HeaderWidth)); } | ||
121 | var str = (string)MenuItemDisplayer(menuitem.Parameters, li); | 167 | var str = (string)MenuItemDisplayer(menuitem.Parameters, li); |
122 | - if (string.IsNullOrEmpty(str)) { Console.SetCursorPosition(0, Console.CursorTop); } | 168 | + if (string.IsNullOrEmpty(str)) { ColorConsole.SetCursorPosition(0, ColorConsole.CursorTop); } |
123 | if (str == null) { break; } | 169 | if (str == null) { break; } |
124 | } | 170 | } |
125 | } | 171 | } |
@@ -130,49 +176,63 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -130,49 +176,63 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
130 | if (columncounter == columns) { ColorConsole.WriteLine(); columncounter = 0; } | 176 | if (columncounter == columns) { ColorConsole.WriteLine(); columncounter = 0; } |
131 | else | 177 | else |
132 | { | 178 | { |
133 | - Console.SetCursorPosition(columnlength * columncounter - 2, Console.CursorTop); | 179 | + ColorConsole.SetCursorPosition(columnlength * columncounter - 2, ColorConsole.CursorTop); |
134 | ColorConsole.Write(" "); | 180 | ColorConsole.Write(" "); |
135 | } | 181 | } |
136 | } | 182 | } |
137 | i++; | 183 | i++; |
138 | } | 184 | } |
139 | if (columns != 1) { ColorConsole.WriteLine(); } | 185 | if (columns != 1) { ColorConsole.WriteLine(); } |
140 | - if (selectionMode==SelectionMode.Multi) | 186 | + if (selectionMode == SelectionMode.Multi) |
141 | { | 187 | { |
142 | - ColorConsole.Write("*", ConsoleColor.Red,bracket:"()");ColorConsole.WriteLine(" All"); | 188 | + ColorConsole.Write("*", ConsoleColor.Red, bracket: "()"); ColorConsole.WriteLine(" All"); |
143 | } | 189 | } |
144 | - ColorConsole.Write("EX", ConsoleColor.Red,bracket:"()");ColorConsole.WriteLine(" Exit"); | 190 | + ColorConsole.Write("EX", ConsoleColor.Red, bracket: "()"); ColorConsole.WriteLine(" Exit"); |
145 | } | 191 | } |
146 | public class Selection | 192 | public class Selection |
147 | { | 193 | { |
194 | + public Selection() { } | ||
195 | + public Selection(string selectedkey,object parameter) | ||
196 | + { | ||
197 | + Result = SelectionResult.Ok; | ||
198 | + SelectedKeyList = new List<string>() { { selectedkey } }; | ||
199 | + SelectedParameterList = new List<object>() { { parameter } }; | ||
200 | + } | ||
148 | public List<string> SelectedKeyList = null; | 201 | public List<string> SelectedKeyList = null; |
149 | public SelectionResult Result; | 202 | public SelectionResult Result; |
150 | public List<object> SelectedParameterList; | 203 | public List<object> SelectedParameterList; |
151 | } | 204 | } |
152 | public enum SelectionResult { Exit, None, Error, Ok, } | 205 | public enum SelectionResult { Exit, None, Error, Ok, } |
153 | public enum SelectionMode { Single, Multi, } | 206 | public enum SelectionMode { Single, Multi, } |
154 | - public Selection Select() | 207 | + public Selection Select(string forcedselectionkeylist=null) |
155 | { | 208 | { |
156 | - List<string> selectionKeyList=null; | ||
157 | - List<object> selectionParList = null; | ||
158 | - var result = new Selection(); | 209 | + List<string> selectionKeyList; |
210 | + List<object> selectionParList; | ||
159 | string selectionliststr; | 211 | string selectionliststr; |
160 | - ColorConsole.Write(SelectionPrompt,ConsoleColor.Yellow); | ||
161 | - ColorConsole.Write(" --> ", ConsoleColor.White); | ||
162 | - var remembercursorleft = Console.CursorLeft; | ||
163 | - var remembercursortop = Console.CursorTop; | ||
164 | - if (selectionMode == SelectionMode.Multi) | 212 | + var result = new Selection(); |
213 | + if (GetCommandMode()) | ||
165 | { | 214 | { |
166 | - ColorConsole.WriteLine(); | ||
167 | - ColorConsole.WriteLine("Multiple selections are separated with comma(,), enter asterisk(*) to select all)!"); | 215 | + selectionliststr = forcedselectionkeylist??"EX"; |
168 | } | 216 | } |
169 | - var remembercursorleft2 = Console.CursorLeft; | ||
170 | - var remembercursortop2 = Console.CursorTop; | ||
171 | - Console.SetCursorPosition(remembercursorleft, remembercursortop); | ||
172 | - selectionliststr = Console.ReadLine().ToUpper(); | ||
173 | - if (selectionMode == SelectionMode.Multi) | 217 | + else |
174 | { | 218 | { |
175 | - Console.SetCursorPosition(remembercursorleft2, remembercursortop2); | 219 | + ColorConsole.Write(SelectionPrompt, ConsoleColor.Yellow); |
220 | + ColorConsole.Write(" --> ", ConsoleColor.White); | ||
221 | + var remembercursorleft = ColorConsole.CursorLeft; | ||
222 | + var remembercursortop = ColorConsole.CursorTop; | ||
223 | + if (selectionMode == SelectionMode.Multi) | ||
224 | + { | ||
225 | + ColorConsole.WriteLine(); | ||
226 | + ColorConsole.WriteLine("Multiple selections are separated with comma(,), enter asterisk(*) to select all!"); | ||
227 | + } | ||
228 | + var remembercursorleft2 = ColorConsole.CursorLeft; | ||
229 | + var remembercursortop2 = ColorConsole.CursorTop; | ||
230 | + ColorConsole.SetCursorPosition(remembercursorleft, remembercursortop); | ||
231 | + selectionliststr = ColorConsole.ReadLine().ToUpper(); | ||
232 | + if (selectionMode == SelectionMode.Multi) | ||
233 | + { | ||
234 | + ColorConsole.SetCursorPosition(remembercursorleft2, remembercursortop2); | ||
235 | + } | ||
176 | } | 236 | } |
177 | if (selectionliststr == "EX") | 237 | if (selectionliststr == "EX") |
178 | { | 238 | { |
@@ -186,37 +246,37 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -186,37 +246,37 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
186 | result.SelectedKeyList = null; | 246 | result.SelectedKeyList = null; |
187 | return result; | 247 | return result; |
188 | } | 248 | } |
189 | - else if (selectionMode == SelectionMode.Multi && selectionliststr == "*") | 249 | + else if (selectionMode == SelectionMode.Multi && selectionliststr == "*") |
190 | { | 250 | { |
191 | selectionKeyList = new List<string>(); | 251 | selectionKeyList = new List<string>(); |
192 | selectionParList = new List<object>(); | 252 | selectionParList = new List<object>(); |
193 | var i = 1; | 253 | var i = 1; |
194 | - foreach (var mi in MenuItemList) | ||
195 | - { | 254 | + foreach (var mi in MenuItemList) |
255 | + { | ||
196 | selectionKeyList.Add(mi.Key); | 256 | selectionKeyList.Add(mi.Key); |
197 | selectionParList.Add(mi.Parameters); | 257 | selectionParList.Add(mi.Parameters); |
198 | } | 258 | } |
199 | result.Result = SelectionResult.Ok; | 259 | result.Result = SelectionResult.Ok; |
200 | result.SelectedKeyList = selectionKeyList; | 260 | result.SelectedKeyList = selectionKeyList; |
201 | - result.SelectedParameterList= selectionParList; | ||
202 | - return result; | 261 | + result.SelectedParameterList = selectionParList; |
262 | + return result; | ||
203 | } | 263 | } |
204 | selectionKeyList = new List<string>(); | 264 | selectionKeyList = new List<string>(); |
205 | selectionParList = new List<object>(); | 265 | selectionParList = new List<object>(); |
206 | foreach (var selection in selectionliststr.Split(',').ToList()) | 266 | foreach (var selection in selectionliststr.Split(',').ToList()) |
207 | { | 267 | { |
208 | string _selection = selection; | 268 | string _selection = selection; |
209 | - object _parameters=null; | 269 | + object _parameters = null; |
210 | if (!MenuKeyList.Contains(_selection)) | 270 | if (!MenuKeyList.Contains(_selection)) |
211 | { | 271 | { |
212 | if (!int.TryParse(_selection, out int indexselection) || indexselection < 1 || indexselection > MenuItemList.Count()) | 272 | if (!int.TryParse(_selection, out int indexselection) || indexselection < 1 || indexselection > MenuItemList.Count()) |
213 | { | 273 | { |
214 | - IncorrectSelection($"Selected item {_selection} is not valid!"); | 274 | + Menu.IncorrectSelection($"Selected item {_selection} is not valid!"); |
215 | result.Result = SelectionResult.Error; | 275 | result.Result = SelectionResult.Error; |
216 | result.SelectedKeyList = null; | 276 | result.SelectedKeyList = null; |
217 | return result; | 277 | return result; |
218 | } | 278 | } |
219 | - _selection = GetItemKey(indexselection-1); | 279 | + _selection = GetItemKey(indexselection - 1); |
220 | _parameters = GetItem(indexselection - 1).Parameters; | 280 | _parameters = GetItem(indexselection - 1).Parameters; |
221 | } | 281 | } |
222 | selectionKeyList.Add(_selection); | 282 | selectionKeyList.Add(_selection); |
@@ -227,15 +287,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -227,15 +287,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
227 | result.SelectedParameterList = selectionParList; | 287 | result.SelectedParameterList = selectionParList; |
228 | return result; | 288 | return result; |
229 | } | 289 | } |
230 | - public static void IncorrectSelection(string partxt="") | ||
231 | - { | ||
232 | - ColorConsole.WriteLine(); | ||
233 | - ColorConsole.WriteLine($"Incorrect selection! {partxt} Make a new selection!",ConsoleColor.Red); | ||
234 | - Console.WriteLine("Press a key to continue..."); | ||
235 | - Console.ReadKey(); | ||
236 | - } | ||
237 | - | ||
238 | - public void Execute(List<string> selectedkeylist) | 290 | + public void ExecuteSelection(List<string> selectedkeylist) |
239 | { | 291 | { |
240 | object o = null; | 292 | object o = null; |
241 | foreach (var mi in MenuItemList) | 293 | foreach (var mi in MenuItemList) |
@@ -245,7 +297,20 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -245,7 +297,20 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
245 | o = mi.Executor(mi.Parameters, o); | 297 | o = mi.Executor(mi.Parameters, o); |
246 | } | 298 | } |
247 | } | 299 | } |
248 | - ColorConsole.WriteLine("Press any key to continue...", ConsoleColor.Yellow); Console.ReadKey(); | 300 | + Menu.PressAnykeyToContinue(); |
301 | + } | ||
302 | + | ||
303 | + public void ExecuteSelection(Menu.Selection sr) | ||
304 | + { | ||
305 | + object o = null; | ||
306 | + foreach (var mi in MenuItemList) | ||
307 | + { | ||
308 | + if (sr.SelectedKeyList.Contains(mi.Key)) | ||
309 | + { | ||
310 | + o = mi.Executor(sr.SelectedParameterList.ElementAt(sr.SelectedKeyList.IndexOf(mi.Key)), o); | ||
311 | + } | ||
312 | + } | ||
313 | + Menu.PressAnykeyToContinue(); | ||
249 | } | 314 | } |
250 | public MenuItemExecutorFunc GetExecutor(string key) | 315 | public MenuItemExecutorFunc GetExecutor(string key) |
251 | { | 316 | { |
@@ -278,7 +343,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -278,7 +343,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
278 | { | 343 | { |
279 | return MenuKeyList.ElementAt(ix); | 344 | return MenuKeyList.ElementAt(ix); |
280 | } | 345 | } |
281 | - public void SetParameters(Menu.Selection r, object p=null) | 346 | + public void SetExecutorParameters(Menu.Selection r, object p=null) |
282 | { | 347 | { |
283 | foreach (var mi in this.MenuItemList) | 348 | foreach (var mi in this.MenuItemList) |
284 | { | 349 | { |
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools.cs
0 → 100644
@@ -0,0 +1,76 @@ | @@ -0,0 +1,76 @@ | ||
1 | +using System; | ||
2 | +using System.IO; | ||
3 | +using System.Collections.Generic; | ||
4 | +using System.Linq; | ||
5 | +using System.Security.Principal; | ||
6 | +using System.Text; | ||
7 | +using System.Threading.Tasks; | ||
8 | +using System.Threading; | ||
9 | + | ||
10 | +using Microsoft.Web.Administration; | ||
11 | +using System.Management; | ||
12 | +using System.Diagnostics; | ||
13 | + | ||
14 | +using Vrh.XmlProcessing; | ||
15 | +using System.Xml.Linq; | ||
16 | + | ||
17 | +namespace Vrh.Log4Pro.MaintenanceConsole | ||
18 | +{ | ||
19 | + public static class Tools | ||
20 | + { | ||
21 | + public static bool IsElevated | ||
22 | + { | ||
23 | + get | ||
24 | + { | ||
25 | + return new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator); | ||
26 | + } | ||
27 | + } | ||
28 | + public static string ExecuteAndGetStdIo(string exepath, string args) | ||
29 | + { | ||
30 | + StringBuilder outputBuilder = new StringBuilder(); | ||
31 | + StringBuilder erroroutputBuilder = new StringBuilder(); | ||
32 | + ProcessStartInfo startInfo = new ProcessStartInfo() { }; | ||
33 | + using (Process exeProcess = new Process()) | ||
34 | + { | ||
35 | + startInfo.CreateNoWindow = true; | ||
36 | + startInfo.WindowStyle = ProcessWindowStyle.Hidden; | ||
37 | + startInfo.RedirectStandardOutput = true; | ||
38 | + startInfo.RedirectStandardError= true; | ||
39 | + startInfo.RedirectStandardInput = true; | ||
40 | + startInfo.UseShellExecute = false; | ||
41 | + startInfo.FileName = exepath; | ||
42 | + startInfo.Verb= "runas"; | ||
43 | + startInfo.Arguments = args; | ||
44 | + | ||
45 | + exeProcess.StartInfo = startInfo; | ||
46 | + // enable raising events because Process does not raise events by default | ||
47 | + exeProcess.EnableRaisingEvents = true; | ||
48 | + exeProcess.OutputDataReceived += new DataReceivedEventHandler | ||
49 | + ( | ||
50 | + delegate (object sender, DataReceivedEventArgs e) | ||
51 | + { | ||
52 | + // append the new data to the data already read-in | ||
53 | + outputBuilder.Append(e.Data + "\r\n"); | ||
54 | + } | ||
55 | + ); | ||
56 | + exeProcess.ErrorDataReceived += new DataReceivedEventHandler | ||
57 | + ( | ||
58 | + delegate (object sender, DataReceivedEventArgs e) | ||
59 | + { | ||
60 | + // append the new data to the data already read-in | ||
61 | + erroroutputBuilder.Append(e.Data + "\r\n"); | ||
62 | + } | ||
63 | + ); | ||
64 | + // start the process | ||
65 | + // then begin asynchronously reading the output | ||
66 | + // then wait for the process to exit | ||
67 | + // then cancel asynchronously reading the output | ||
68 | + exeProcess.Start(); | ||
69 | + exeProcess.BeginOutputReadLine(); | ||
70 | + exeProcess.WaitForExit(); | ||
71 | + exeProcess.CancelOutputRead(); | ||
72 | + return outputBuilder.ToString(); | ||
73 | + } | ||
74 | + } | ||
75 | + } | ||
76 | +} |
Vrh.Log4Pro.MaintenanceConsole/Manager - FileCleanerManager.cs
@@ -42,8 +42,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -42,8 +42,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
42 | if (sr.Result == Menu.SelectionResult.Exit) { break; } | 42 | if (sr.Result == Menu.SelectionResult.Exit) { break; } |
43 | else if (sr.Result == Menu.SelectionResult.None) { continue; } | 43 | else if (sr.Result == Menu.SelectionResult.None) { continue; } |
44 | else if (sr.Result == Menu.SelectionResult.Error) { continue; } | 44 | else if (sr.Result == Menu.SelectionResult.Error) { continue; } |
45 | - menufunctions.SetParameters(sr,config); | ||
46 | - menufunctions.Execute(sr.SelectedKeyList); | 45 | + menufunctions.SetExecutorParameters(sr,config); |
46 | + menufunctions.ExecuteSelection(sr.SelectedKeyList); | ||
47 | } | 47 | } |
48 | return null; | 48 | return null; |
49 | } | 49 | } |
@@ -309,7 +309,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -309,7 +309,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
309 | #endregion GetDefinitionList | 309 | #endregion GetDefinitionList |
310 | } | 310 | } |
311 | #endregion FileCleanerManagerCoreXmlProcessor class | 311 | #endregion FileCleanerManagerCoreXmlProcessor class |
312 | - #region WindowsService class | 312 | + |
313 | + #region FolderToClean class | ||
313 | public class FolderToClean : XmlLinqBase | 314 | public class FolderToClean : XmlLinqBase |
314 | { | 315 | { |
315 | #region fields | 316 | #region fields |
@@ -499,6 +500,5 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -499,6 +500,5 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
499 | } | 500 | } |
500 | #endregion XmlStructure | 501 | #endregion XmlStructure |
501 | } | 502 | } |
502 | - #endregion WindowsService class | ||
503 | - | 503 | + #endregion FolderToClean class |
504 | } | 504 | } |
Vrh.Log4Pro.MaintenanceConsole/Manager - MaintenanceToolManager.cs
@@ -43,8 +43,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -43,8 +43,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
43 | if (sr.Result == Menu.SelectionResult.Exit) { break; } | 43 | if (sr.Result == Menu.SelectionResult.Exit) { break; } |
44 | else if (sr.Result == Menu.SelectionResult.None) { continue; } | 44 | else if (sr.Result == Menu.SelectionResult.None) { continue; } |
45 | else if (sr.Result == Menu.SelectionResult.Error) { continue; } | 45 | else if (sr.Result == Menu.SelectionResult.Error) { continue; } |
46 | - menufunctions.SetParameters(sr,config); | ||
47 | - menufunctions.Execute(sr.SelectedKeyList); | 46 | + menufunctions.SetExecutorParameters(sr,config); |
47 | + menufunctions.ExecuteSelection(sr.SelectedKeyList); | ||
48 | } | 48 | } |
49 | return null; | 49 | return null; |
50 | } | 50 | } |
@@ -80,7 +80,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -80,7 +80,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
80 | ColorConsole.WriteLine(regexmatch.Groups[groupname].Value, ConsoleColor.Yellow); | 80 | ColorConsole.WriteLine(regexmatch.Groups[groupname].Value, ConsoleColor.Yellow); |
81 | } | 81 | } |
82 | } | 82 | } |
83 | - ColorConsole.ReadLine($"Press any key to continue..."); | 83 | + ColorConsole.PressAnykeyToContinue(); |
84 | } | 84 | } |
85 | return o; | 85 | return o; |
86 | } | 86 | } |
Vrh.Log4Pro.MaintenanceConsole/Manager - ScheduledTaskManager.cs
0 → 100644
@@ -0,0 +1,577 @@ | @@ -0,0 +1,577 @@ | ||
1 | +using System; | ||
2 | +using System.IO; | ||
3 | +using System.Configuration.Install; | ||
4 | +using System.Collections.Generic; | ||
5 | +using System.Linq; | ||
6 | +using System.ServiceProcess; | ||
7 | +using System.Text; | ||
8 | +using System.Threading; | ||
9 | +using System.Threading.Tasks; | ||
10 | + | ||
11 | +using Microsoft.Web.Administration; | ||
12 | +using System.Management; | ||
13 | +using System.Diagnostics; | ||
14 | + | ||
15 | +using Vrh.XmlProcessing; | ||
16 | +using VRH.Common; | ||
17 | +using System.Xml.Linq; | ||
18 | +using System.Text.RegularExpressions; | ||
19 | + | ||
20 | +namespace Vrh.Log4Pro.MaintenanceConsole | ||
21 | +{ | ||
22 | + #region ScheduledTaskManager class | ||
23 | + public static class ScheduledTaskmanagerManager | ||
24 | + { | ||
25 | + private const string XMLCONNECTIONSTRING = "file=Config.Xml;element=ScheduledTasks;"; | ||
26 | + | ||
27 | + #region Execute | ||
28 | + public static object Execute(object o1 = null, object o2 = null) | ||
29 | + { | ||
30 | + var args = o1 as string[]; | ||
31 | + var module = CommandLine.GetCommandLineArgument(args, "-MODULE"); | ||
32 | + var functionkey = CommandLine.GetCommandLineArgument(args, "-FUNCTION"); | ||
33 | + | ||
34 | + string xmlcs = XMLCONNECTIONSTRING; | ||
35 | + var config = new ScheduledTaskManagerCoreXmlProcessor(xmlcs, "", "hu-HU"); | ||
36 | + var menufunctions = new Menu("Manage Scheduled tasks", "Select the management function!") | ||
37 | + .AddMenuItem(new Menu.Item("INS", "Install scheduled task", Install)) | ||
38 | + .AddMenuItem(new Menu.Item("UIN", "Uninstall scheduled task", Uninstall)) | ||
39 | + .AddMenuItem(new Menu.Item("RUN", "Start scheduled task", Run)) | ||
40 | + .AddMenuItem(new Menu.Item("END", "Stop scheduled task", End)) | ||
41 | + .AddMenuItem(new Menu.Item("ENA", "Enable scheduled task", Enable)) | ||
42 | + .AddMenuItem(new Menu.Item("DIS", "Disable scheduled task", Disable)) | ||
43 | + .AddMenuItem(new Menu.Item("CHP", "Change scheduled task priority", ChangePriority)) | ||
44 | + .SetSelectionMode(Menu.SelectionMode.Single); | ||
45 | + | ||
46 | + while (true) | ||
47 | + { | ||
48 | + Menu.Selection sr; | ||
49 | + | ||
50 | + menufunctions.DisplayTitle(); | ||
51 | + DisplayTasks(config); | ||
52 | + menufunctions.DisplayItems(); | ||
53 | + sr = menufunctions.Select(functionkey); | ||
54 | + if (sr.Result == Menu.SelectionResult.Exit) { break; } | ||
55 | + else if (sr.Result == Menu.SelectionResult.None) { continue; } | ||
56 | + else if (sr.Result == Menu.SelectionResult.Error) { continue; } | ||
57 | + menufunctions.SetExecutorParameters(sr, new ScheduledTaskExecutorParameter (config,args)); | ||
58 | + menufunctions.ExecuteSelection(sr.SelectedKeyList); | ||
59 | + if (menufunctions.GetCommandMode()) { break; } | ||
60 | + } | ||
61 | + return o2; | ||
62 | + } | ||
63 | + #endregion Execute | ||
64 | + #region ScheduledTaskFunctionExecutorParameter | ||
65 | + public class ScheduledTaskExecutorParameter | ||
66 | + { | ||
67 | + public ScheduledTaskExecutorParameter(ScheduledTaskManagerCoreXmlProcessor cfg, string[] args) { Config = cfg;Args = args; } | ||
68 | + public ScheduledTaskManagerCoreXmlProcessor Config; | ||
69 | + public string[] Args; | ||
70 | + } | ||
71 | + #endregion ScheduledTaskFunctionExecutorParameter | ||
72 | + #region First level Executors with UI | ||
73 | + private static object ChangePriority(object parameter, object o) | ||
74 | + { | ||
75 | + var config = (parameter as ScheduledTaskExecutorParameter).Config; | ||
76 | + var args = (parameter as ScheduledTaskExecutorParameter).Args; | ||
77 | + | ||
78 | + var selectedtaskindexes = CommandLine.GetCommandLineArgument(args, "-TASKS"); | ||
79 | + | ||
80 | + var menufolders = DisplayTasks(config, $"Select the scheduled task(s) to manage with function '{nameof(ChangePriority)}'!"); | ||
81 | + | ||
82 | + Menu.Selection sr = menufolders.Select(selectedtaskindexes); | ||
83 | + if (sr.Result == Menu.SelectionResult.Exit) { return o; } | ||
84 | + else if (sr.Result == Menu.SelectionResult.None) { return o; } | ||
85 | + else if (sr.Result == Menu.SelectionResult.Error) { return o; } | ||
86 | + else if (sr.Result == Menu.SelectionResult.Ok) { } | ||
87 | + else { } | ||
88 | + foreach (var p in sr.SelectedParameterList) | ||
89 | + { | ||
90 | + ScheduledTask st = p as ScheduledTask; | ||
91 | + try | ||
92 | + { | ||
93 | + ScheduledTaskManagerCore.SetPriority(st.Xml_Name,st.Xml_Priority); | ||
94 | + ColorConsole.WriteLine($"Priority changed for scheduled task. Name:{st.Xml_Name}", ConsoleColor.Green); | ||
95 | + } | ||
96 | + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } | ||
97 | + } | ||
98 | + return o; | ||
99 | + } | ||
100 | + private static object Disable(object parameter, object o) | ||
101 | + { | ||
102 | + var config = (parameter as ScheduledTaskExecutorParameter).Config; | ||
103 | + var args = (parameter as ScheduledTaskExecutorParameter).Args; | ||
104 | + | ||
105 | + var selectedtaskindexes = CommandLine.GetCommandLineArgument(args, "-TASKS"); | ||
106 | + | ||
107 | + var menufolders = DisplayTasks(config, $"Select the scheduled task(s) to manage with function '{nameof(Disable)}'!"); | ||
108 | + | ||
109 | + Menu.Selection sr = menufolders.Select(selectedtaskindexes); | ||
110 | + if (sr.Result == Menu.SelectionResult.Exit) { return o; } | ||
111 | + else if (sr.Result == Menu.SelectionResult.None) { return o; } | ||
112 | + else if (sr.Result == Menu.SelectionResult.Error) { return o; } | ||
113 | + else if (sr.Result == Menu.SelectionResult.Ok) { } | ||
114 | + else { } | ||
115 | + foreach (var p in sr.SelectedParameterList) | ||
116 | + { | ||
117 | + ScheduledTask st = p as ScheduledTask; | ||
118 | + try | ||
119 | + { | ||
120 | + ScheduledTaskManagerCore.DisableTask(st.Xml_Name); | ||
121 | + ColorConsole.WriteLine($"Scheduled task disabled. Name:{st.Xml_Name}", ConsoleColor.Green); | ||
122 | + } | ||
123 | + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } | ||
124 | + } | ||
125 | + return o; | ||
126 | + } | ||
127 | + private static object Enable(object parameter, object o) | ||
128 | + { | ||
129 | + var config = (parameter as ScheduledTaskExecutorParameter).Config; | ||
130 | + var args = (parameter as ScheduledTaskExecutorParameter).Args; | ||
131 | + | ||
132 | + var selectedtaskindexes = CommandLine.GetCommandLineArgument(args, "-TASKS"); | ||
133 | + | ||
134 | + var menufolders = DisplayTasks(config, $"Select the scheduled task(s) to manage with function '{nameof(Enable)}'!"); | ||
135 | + | ||
136 | + Menu.Selection sr = menufolders.Select(selectedtaskindexes); | ||
137 | + if (sr.Result == Menu.SelectionResult.Exit) { return o; } | ||
138 | + else if (sr.Result == Menu.SelectionResult.None) { return o; } | ||
139 | + else if (sr.Result == Menu.SelectionResult.Error) { return o; } | ||
140 | + else if (sr.Result == Menu.SelectionResult.Ok) { } | ||
141 | + else { } | ||
142 | + foreach (var p in sr.SelectedParameterList) | ||
143 | + { | ||
144 | + ScheduledTask st = p as ScheduledTask; | ||
145 | + try | ||
146 | + { | ||
147 | + ScheduledTaskManagerCore.EnableTask(st.Xml_Name); | ||
148 | + ColorConsole.WriteLine($"Scheduled task enabled. Name:{st.Xml_Name}", ConsoleColor.Green); | ||
149 | + } | ||
150 | + catch (Exception ex){ ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } | ||
151 | + } | ||
152 | + return o; | ||
153 | + } | ||
154 | + private static object End(object parameter, object o) | ||
155 | + { | ||
156 | + var config = (parameter as ScheduledTaskExecutorParameter).Config; | ||
157 | + var args = (parameter as ScheduledTaskExecutorParameter).Args; | ||
158 | + | ||
159 | + var selectedtaskindexes = CommandLine.GetCommandLineArgument(args, "-TASKS"); | ||
160 | + | ||
161 | + var menufolders = DisplayTasks(config, $"Select the scheduled task(s) to manage with function '{nameof(End)}'!"); | ||
162 | + | ||
163 | + Menu.Selection sr = menufolders.Select(selectedtaskindexes); | ||
164 | + if (sr.Result == Menu.SelectionResult.Exit) { return o; } | ||
165 | + else if (sr.Result == Menu.SelectionResult.None) { return o; } | ||
166 | + else if (sr.Result == Menu.SelectionResult.Error) { return o; } | ||
167 | + else if (sr.Result == Menu.SelectionResult.Ok) { } | ||
168 | + else { } | ||
169 | + foreach (var p in sr.SelectedParameterList) | ||
170 | + { | ||
171 | + ScheduledTask st = p as ScheduledTask; | ||
172 | + try | ||
173 | + { | ||
174 | + ScheduledTaskManagerCore.EndTask(st.Xml_Name); | ||
175 | + ColorConsole.WriteLine($"Scheduled task stopped. Name:{st.Xml_Name}", ConsoleColor.Green); | ||
176 | + } | ||
177 | + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } | ||
178 | + } | ||
179 | + return o; | ||
180 | + } | ||
181 | + private static object Run(object parameter, object o) | ||
182 | + { | ||
183 | + var config = (parameter as ScheduledTaskExecutorParameter).Config; | ||
184 | + var args = (parameter as ScheduledTaskExecutorParameter).Args; | ||
185 | + | ||
186 | + var selectedtaskindexes = CommandLine.GetCommandLineArgument(args, "-TASKS"); | ||
187 | + | ||
188 | + var menufolders = DisplayTasks(config, $"Select the scheduled task(s) to manage with function '{nameof(Run)}'!"); | ||
189 | + | ||
190 | + Menu.Selection sr = menufolders.Select(selectedtaskindexes); | ||
191 | + if (sr.Result == Menu.SelectionResult.Exit) { return o; } | ||
192 | + else if (sr.Result == Menu.SelectionResult.None) { return o; } | ||
193 | + else if (sr.Result == Menu.SelectionResult.Error) { return o; } | ||
194 | + else if (sr.Result == Menu.SelectionResult.Ok) { } | ||
195 | + else { } | ||
196 | + foreach (var p in sr.SelectedParameterList) | ||
197 | + { | ||
198 | + ScheduledTask st = p as ScheduledTask; | ||
199 | + try | ||
200 | + { | ||
201 | + ScheduledTaskManagerCore.RunTask(st.Xml_Name); | ||
202 | + ColorConsole.WriteLine($"Scheduled task started. Name:{st.Xml_Name}", ConsoleColor.Green); | ||
203 | + } | ||
204 | + catch (Exception ex) | ||
205 | + { | ||
206 | + ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); | ||
207 | + } | ||
208 | + } | ||
209 | + return o; | ||
210 | + } | ||
211 | + private static object Uninstall(object parameter, object o) | ||
212 | + { | ||
213 | + var config = (parameter as ScheduledTaskExecutorParameter).Config; | ||
214 | + var args = (parameter as ScheduledTaskExecutorParameter).Args; | ||
215 | + | ||
216 | + var selectedtaskindexes = CommandLine.GetCommandLineArgument(args, "-TASKS"); | ||
217 | + | ||
218 | + var menufolders = DisplayTasks(config, $"Select the scheduled task(s) to manage with function '{nameof(Uninstall)}'!"); | ||
219 | + | ||
220 | + Menu.Selection sr = menufolders.Select(selectedtaskindexes); | ||
221 | + if (sr.Result == Menu.SelectionResult.Exit) { return o; } | ||
222 | + else if (sr.Result == Menu.SelectionResult.None) { return o; } | ||
223 | + else if (sr.Result == Menu.SelectionResult.Error) { return o; } | ||
224 | + else if (sr.Result == Menu.SelectionResult.Ok) { } | ||
225 | + else { } | ||
226 | + foreach (var p in sr.SelectedParameterList) | ||
227 | + { | ||
228 | + ScheduledTask st = p as ScheduledTask; | ||
229 | + try | ||
230 | + { | ||
231 | + ScheduledTaskManagerCore.EndTask(st.Xml_Name); | ||
232 | + ScheduledTaskManagerCore.DeleteTask(st.Xml_Name); | ||
233 | + ColorConsole.WriteLine($"Scheduled task uninstalled. Name:{st.Xml_Name}", ConsoleColor.Green); | ||
234 | + } | ||
235 | + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } | ||
236 | + } | ||
237 | + return o; | ||
238 | + } | ||
239 | + private static object Install(object parameter, object o) | ||
240 | + { | ||
241 | + var config = (parameter as ScheduledTaskExecutorParameter).Config; | ||
242 | + var args = (parameter as ScheduledTaskExecutorParameter).Args; | ||
243 | + | ||
244 | + var selectedtaskindexes = CommandLine.GetCommandLineArgument(args, "-TASKS"); | ||
245 | + | ||
246 | + var menufolders = DisplayTasks(config, $"Select the scheduled task(s) to manage with function '{nameof(Install)}'!"); | ||
247 | + | ||
248 | + Menu.Selection sr = menufolders.Select(selectedtaskindexes); | ||
249 | + if (sr.Result == Menu.SelectionResult.Exit) { return o; } | ||
250 | + else if (sr.Result == Menu.SelectionResult.None) { return o; } | ||
251 | + else if (sr.Result == Menu.SelectionResult.Error) { return o; } | ||
252 | + else if (sr.Result == Menu.SelectionResult.Ok) { } | ||
253 | + else { } | ||
254 | + foreach (var p in sr.SelectedParameterList) | ||
255 | + { | ||
256 | + ScheduledTask st = p as ScheduledTask; | ||
257 | + try | ||
258 | + { | ||
259 | + ScheduledTaskManagerCore.EndTask(st.Xml_Name); | ||
260 | + ScheduledTaskManagerCore.DeleteTask(st.Xml_Name); | ||
261 | + ScheduledTaskManagerCore.CreateTask(st); | ||
262 | + ColorConsole.WriteLine($"Scheduled task installed. Name:{st.Xml_Name}", ConsoleColor.Green); | ||
263 | + } | ||
264 | + catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } | ||
265 | + } | ||
266 | + return o; | ||
267 | + } | ||
268 | + #endregion First level Executors with UI | ||
269 | + | ||
270 | + #region private methods | ||
271 | + #region private DisplayTasks | ||
272 | + private static Menu DisplayTasks(ScheduledTaskManagerCoreXmlProcessor config,string prompt = null) | ||
273 | + { | ||
274 | + List<ScheduledTask> schtskdefList = config.GetDefinitionList(); | ||
275 | + var menufct = new Menu("Scheduled tasks",prompt) | ||
276 | + .SetMenuItemDisplayer(DisplayTaskInfo) | ||
277 | + .SetSelectionMode(Menu.SelectionMode.Multi) | ||
278 | + .SetHeaderWidth(4); | ||
279 | + menufct.ClearMenuItemList(); | ||
280 | + foreach (var schtskdef in schtskdefList) | ||
281 | + { | ||
282 | + var st = CollectTaskInfo(schtskdef); | ||
283 | + menufct.AddMenuItem(new Menu.Item(null, null, null, st)); | ||
284 | + } | ||
285 | + menufct.DisplayItems(1); | ||
286 | + return menufct; | ||
287 | + } | ||
288 | + #endregion private DisplayTasks | ||
289 | + #region private method: DisplayTaskInfo | ||
290 | + private static object DisplayTaskInfo(object obj, int lineix) | ||
291 | + { | ||
292 | + ScheduledTask st = obj as ScheduledTask; | ||
293 | + if (lineix == 0) | ||
294 | + { | ||
295 | + ColorConsole.Write($"{st.Xml_Name}", ConsoleColor.Black, ConsoleColor.White); | ||
296 | + var statuscolor = st.Status == "Uninstalled" ? ConsoleColor.Red : ConsoleColor.Green; | ||
297 | + ColorConsole.Write(st.Status, statuscolor, bracket: "[]", prefix: " ", suffix: ". "); | ||
298 | + if (st.Status != "Uninstalled" && st.Status != "Disabled") | ||
299 | + { | ||
300 | + ColorConsole.Write(st.PriorityText(st.Priority), statuscolor, prefix: "Effective priority ", suffix: ". "); | ||
301 | + ColorConsole.Write($"{st.Xml_Commandname}", ConsoleColor.Yellow, prefix: "Command: "); | ||
302 | + } | ||
303 | + ColorConsole.WriteLine(); | ||
304 | + return " "; | ||
305 | + } | ||
306 | + else if (lineix == 1) | ||
307 | + { | ||
308 | + ColorConsole.Write($"{st.Xml_Schedule}",ConsoleColor.Yellow,prefix:"Scheduled ",suffix:" "); | ||
309 | + ColorConsole.Write($"{st.Xml_StartTime}", ConsoleColor.Yellow, prefix: "at ", suffix: ", "); | ||
310 | + ColorConsole.Write(st.PriorityText(st.Xml_Priority), ConsoleColor.Yellow, prefix: "with priority ", suffix: ". "); | ||
311 | + ColorConsole.Write($"{st.Xml_Enable}", ConsoleColor.Yellow, prefix: "After install ", suffix: " "); | ||
312 | + ColorConsole.Write($"{st.Xml_Run}", ConsoleColor.Yellow, prefix: "and run ", suffix: ". "); | ||
313 | + ColorConsole.WriteLine(" "); | ||
314 | + return " "; | ||
315 | + } | ||
316 | + return null; | ||
317 | + } | ||
318 | + #endregion private method: DisplayTaskInfo | ||
319 | + #region private CollectTaskInfo | ||
320 | + private static ScheduledTask CollectTaskInfo(ScheduledTask schtsk) | ||
321 | + { | ||
322 | + string status = Tools.ExecuteAndGetStdIo("schtasks.exe", $"/Query /FO TABLE /TN {schtsk.Xml_Name}"); | ||
323 | + | ||
324 | + try | ||
325 | + { | ||
326 | + var statuslines = status.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); | ||
327 | + var statussplitted = statuslines[3] | ||
328 | + .Split(new string[] { " ", "+" }, StringSplitOptions.RemoveEmptyEntries); | ||
329 | + if (statussplitted[1]=="N/A") | ||
330 | + { | ||
331 | + schtsk.NextRun = ""; | ||
332 | + schtsk.Priority = -1; | ||
333 | + schtsk.Status = statussplitted[2]; | ||
334 | + } | ||
335 | + else | ||
336 | + { | ||
337 | + var nextrunTS = statussplitted[1] + " " + statussplitted[2]; | ||
338 | + var statusinfo = statussplitted[3]; | ||
339 | + if (statusinfo == "AM" || statusinfo == "PM") | ||
340 | + { | ||
341 | + statusinfo = statussplitted[4]; | ||
342 | + nextrunTS += statusinfo; | ||
343 | + } | ||
344 | + schtsk.Status = statusinfo; | ||
345 | + schtsk.NextRun += nextrunTS; | ||
346 | + schtsk.Priority = ScheduledTaskManagerCore.GetPriority(schtsk.Xml_Name); | ||
347 | + } | ||
348 | + } | ||
349 | + catch | ||
350 | + { | ||
351 | + schtsk.Status = "Uninstalled"; | ||
352 | + schtsk.NextRun = ""; | ||
353 | + schtsk.Priority = -1; | ||
354 | + } | ||
355 | + return schtsk; | ||
356 | + } | ||
357 | + #endregion private CollectTaskInfo | ||
358 | + #endregion private methods | ||
359 | + } | ||
360 | + #endregion ScheduledTaskManager class | ||
361 | + | ||
362 | + #region class ScheduledTaskManagerCore | ||
363 | + public static class ScheduledTaskManagerCore | ||
364 | + { | ||
365 | + public static int GetPriority(string taskname) | ||
366 | + { | ||
367 | + try | ||
368 | + { | ||
369 | + return int.Parse(ScheduledTaskManagerCore.GetXml(taskname).Element(XName.Get("Settings")).Element(XName.Get("Priority")).Value); | ||
370 | + } | ||
371 | + catch | ||
372 | + { | ||
373 | + return ScheduledTask.XmlStructure.ScheduledTask.Attributes.Priority.Values.DEFAULT; | ||
374 | + } | ||
375 | + } | ||
376 | + public static void SetPriority(string taskname,int priority) | ||
377 | + { | ||
378 | + var schtskXml = ScheduledTaskManagerCore.GetXml(taskname); | ||
379 | + schtskXml.Element(XName.Get("Settings")).Element(XName.Get("Priority")).Value= priority.ToString(); | ||
380 | + ScheduledTaskManagerCore.SetXml(taskname, schtskXml); | ||
381 | + } | ||
382 | + public static XElement GetXml(string taskname) { return XElement.Parse(Tools.ExecuteAndGetStdIo("schtasks.exe", $"/Query /XML /TN {taskname}")); } | ||
383 | + public static void SetXml(string taskname,XElement schtskXml) | ||
384 | + { | ||
385 | + EndTask(taskname); | ||
386 | + DeleteTask(taskname); | ||
387 | + CreateTask(taskname, schtskXml); | ||
388 | + } | ||
389 | + public static void EndTask(string taskname) { Tools.ExecuteAndGetStdIo("schtasks.exe", $"/End /TN {taskname}"); } | ||
390 | + public static void RunTask(string taskname) { Tools.ExecuteAndGetStdIo("schtasks.exe", $"/Run /TN {taskname}"); } | ||
391 | + public static void EnableTask(string taskname) | ||
392 | + { | ||
393 | + Tools.ExecuteAndGetStdIo("schtasks.exe", $"/Change /ENABLE /TN {taskname}"); | ||
394 | + } | ||
395 | + public static void DisableTask(string taskname) | ||
396 | + { | ||
397 | + EndTask(taskname); | ||
398 | + Tools.ExecuteAndGetStdIo("schtasks.exe", $"/Change /DISABLE /TN {taskname}"); | ||
399 | + } | ||
400 | + public static void DeleteTask(string taskname) { Tools.ExecuteAndGetStdIo("schtasks.exe", $"/Delete /TN {taskname} /F"); } | ||
401 | + public static void CreateTask(string taskname, XElement schtskXml) | ||
402 | + { | ||
403 | + var tmpfilename = $"TMP_{taskname}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xml"; | ||
404 | + if (File.Exists(tmpfilename)) { File.Delete(tmpfilename); } | ||
405 | + schtskXml.Save(tmpfilename); | ||
406 | + Tools.ExecuteAndGetStdIo("schtasks.exe", $"/Create /XML {tmpfilename} /TN {taskname}"); | ||
407 | + if (File.Exists(tmpfilename)) { File.Delete(tmpfilename); } | ||
408 | + } | ||
409 | + public static void CreateTask(ScheduledTask st) | ||
410 | + { | ||
411 | + string taskname = st.Xml_Name; | ||
412 | + string tasktorunpars = st.Xml_Commandname; | ||
413 | + | ||
414 | + string schedulepars = ""; | ||
415 | + if (st.Xml_Schedule==nameof(ScheduledTask.XmlStructure.ScheduledTask.Attributes.Schedule.Values.MONTHLY)) { schedulepars += "/SC MONTHLY /D 1"; } | ||
416 | + else if (st.Xml_Schedule == nameof(ScheduledTask.XmlStructure.ScheduledTask.Attributes.Schedule.Values.WEEKLY)) { schedulepars += "/SC WEEKLY /D MON"; } | ||
417 | + else if (st.Xml_Schedule == nameof(ScheduledTask.XmlStructure.ScheduledTask.Attributes.Schedule.Values.DAILY)) { schedulepars += "/SC DAILY"; } | ||
418 | + else if (st.Xml_Schedule == nameof(ScheduledTask.XmlStructure.ScheduledTask.Attributes.Schedule.Values.HOURLY)) { schedulepars += "/SC DAILY /RI 60 /DU 24:00 /K"; } | ||
419 | + else if (st.Xml_Schedule == nameof(ScheduledTask.XmlStructure.ScheduledTask.Attributes.Schedule.Values.CONTINOUS)) { schedulepars += "/SC DAILY /RI 5 /DU 24:00 /K"; } | ||
420 | + var sst = st.Xml_StartTime.ToString("HH:mm:ss"); | ||
421 | + string starttimepars = $"/ST {sst}"; | ||
422 | + string passwordpars = "/NP"; | ||
423 | + string forcecreatepars = "/F"; | ||
424 | + string prioritypars = "/RL HIGHEST"; | ||
425 | + | ||
426 | + var args = $"/Create /TR {tasktorunpars} {schedulepars} {starttimepars} {passwordpars} {forcecreatepars} {prioritypars} /TN {taskname}"; | ||
427 | + var result = Tools.ExecuteAndGetStdIo("schtasks.exe", args); | ||
428 | + | ||
429 | + if (st.Xml_Enable) { EnableTask(taskname); } else { DisableTask(taskname); } | ||
430 | + if (st.Xml_Run) { RunTask(taskname); } else { EndTask(taskname); } | ||
431 | + } | ||
432 | + } | ||
433 | + #endregion class ScheduledTaskManagerCore | ||
434 | + | ||
435 | + #region ScheduledTaskManagerCoreXmlProcessor class | ||
436 | + public class ScheduledTaskManagerCoreXmlProcessor : XmlParser | ||
437 | + { | ||
438 | + private List<ScheduledTask> _scheduledtasklist; | ||
439 | + #region constructor | ||
440 | + public ScheduledTaskManagerCoreXmlProcessor(string xmlcs, string basefolder, string lcid) : base(xmlcs, basefolder, lcid, null) | ||
441 | + { | ||
442 | + _scheduledtasklist = new List<ScheduledTask>(); | ||
443 | + var schtskxmllist = GetAllXElements(nameof(ScheduledTask.XmlStructure.ScheduledTask)); | ||
444 | + if (schtskxmllist != null && schtskxmllist.Any()) | ||
445 | + { | ||
446 | + foreach (var schtskxml in schtskxmllist) { var st = new ScheduledTask(schtskxml); if (st.Valid) { _scheduledtasklist.Add(st); } } | ||
447 | + } | ||
448 | + } | ||
449 | + #endregion constructor | ||
450 | + #region GetDefinitionList | ||
451 | + public List<ScheduledTask> GetDefinitionList() { return _scheduledtasklist; } | ||
452 | + #endregion GetDefinitionList | ||
453 | + } | ||
454 | + #endregion ScheduledTaskManagerCoreXmlProcessor class | ||
455 | + | ||
456 | + #region ScheduledTask class | ||
457 | + public class ScheduledTask : XmlLinqBase | ||
458 | + { | ||
459 | + #region fields | ||
460 | + public bool Valid = true; | ||
461 | + public string Xml_Name; | ||
462 | + public int Xml_Priority; | ||
463 | + public string Xml_Schedule; | ||
464 | + public DateTime Xml_StartTime; | ||
465 | + public bool Xml_Enable = XmlStructure.ScheduledTask.Attributes.Enable.Values.DEFAULT; | ||
466 | + public bool Xml_Run=XmlStructure.ScheduledTask.Attributes.Run.Values.DEFAULT; | ||
467 | + public string Xml_Commandname; | ||
468 | + | ||
469 | + public string Status; | ||
470 | + public string NextRun; | ||
471 | + public int Priority; | ||
472 | + #endregion fields | ||
473 | + | ||
474 | + #region basic constructor | ||
475 | + public ScheduledTask() { } | ||
476 | + #endregion basic constructor | ||
477 | + #region xml constructor | ||
478 | + public string PriorityText(int pri) | ||
479 | + { | ||
480 | + return | ||
481 | + (pri == 0 ? "Realtime" | ||
482 | + : pri == 1 ? "High" | ||
483 | + : pri == 2 ? "High" | ||
484 | + : pri == 3 ? "Normal" | ||
485 | + : pri == 4 ? "Normal" | ||
486 | + : pri == 5 ? "Normal" | ||
487 | + : pri == 6 ? "Normal" | ||
488 | + : pri == 7 ? "Low" | ||
489 | + : pri == 8 ? "Low" | ||
490 | + : pri == 9 ? "Idle" | ||
491 | + : pri == 10 ? "Idle" | ||
492 | + : "Idle")+$"({pri})"; | ||
493 | + } | ||
494 | + public ScheduledTask(XElement scheduledtaskxml) | ||
495 | + { | ||
496 | + Valid = true; | ||
497 | + string ATTRIBUTEMANDATORY = nameof(XmlStructure.ScheduledTask) + " attribute is mandatory! Name: {0}"; | ||
498 | + Xml_Name = scheduledtaskxml.Attribute(XName.Get(nameof(XmlStructure.ScheduledTask.Attributes.Name)))?.Value; | ||
499 | + if (string.IsNullOrWhiteSpace(Xml_Name)) { throw new ApplicationException(string.Format(ATTRIBUTEMANDATORY, nameof(XmlStructure.ScheduledTask.Attributes.Name))); } | ||
500 | + Xml_Priority = GetValue(nameof(XmlStructure.ScheduledTask.Attributes.Priority), scheduledtaskxml, XmlStructure.ScheduledTask.Attributes.Priority.Values.DEFAULT); | ||
501 | + Xml_Schedule = GetValue(nameof(XmlStructure.ScheduledTask.Attributes.Schedule), scheduledtaskxml, XmlStructure.ScheduledTask.Attributes.Schedule.Values.DEFAULT); | ||
502 | + Xml_StartTime = DateTime.Parse(GetValue(nameof(XmlStructure.ScheduledTask.Attributes.StartTime), scheduledtaskxml, XmlStructure.ScheduledTask.Attributes.StartTime.Values.DEFAULT)); | ||
503 | + Xml_Enable = GetValue(nameof(XmlStructure.ScheduledTask.Attributes.Enable), scheduledtaskxml, XmlStructure.ScheduledTask.Attributes.Enable.Values.DEFAULT); | ||
504 | + Xml_Run = GetValue(nameof(XmlStructure.ScheduledTask.Attributes.Run), scheduledtaskxml, XmlStructure.ScheduledTask.Attributes.Run.Values.DEFAULT); | ||
505 | + Xml_Commandname = GetValue(nameof(XmlStructure.ScheduledTask.Attributes.Commandname), scheduledtaskxml, ""); | ||
506 | + //var conditionxmlList = GetAllXElements(foldertocleanxml, nameof(XmlStructure.FolderToClean.Conditions), nameof(XmlStructure.FolderToClean.Conditions.Condition)); | ||
507 | + } | ||
508 | + #endregion xml constructor | ||
509 | + #region cloner constructor | ||
510 | + public ScheduledTask(ScheduledTask ftc) | ||
511 | + { | ||
512 | + Valid = ftc.Valid; | ||
513 | + Xml_Name = ftc.Xml_Name; | ||
514 | + Xml_Priority = ftc.Xml_Priority; | ||
515 | + Xml_Schedule = ftc.Xml_Schedule; | ||
516 | + Xml_StartTime = ftc.Xml_StartTime; | ||
517 | + Xml_Enable = ftc.Xml_Enable; | ||
518 | + Xml_Run = ftc.Xml_Run; | ||
519 | + Xml_Commandname = ftc.Xml_Commandname; | ||
520 | + } | ||
521 | + #endregion cloner constructor | ||
522 | + #region XmlStructure | ||
523 | + public static class XmlStructure | ||
524 | + { | ||
525 | + public static class ScheduledTask | ||
526 | + { | ||
527 | + public static class Attributes | ||
528 | + { | ||
529 | + public static class Name { } | ||
530 | + public static class StartTime | ||
531 | + { | ||
532 | + public static class Values | ||
533 | + { | ||
534 | + public const string DEFAULT = "04:00"; | ||
535 | + } | ||
536 | + } | ||
537 | + public static class Priority | ||
538 | + { | ||
539 | + public static class Values | ||
540 | + { | ||
541 | + public const int DEFAULT = 7; | ||
542 | + } | ||
543 | + } | ||
544 | + public static class Schedule | ||
545 | + { | ||
546 | + public static class Values | ||
547 | + { | ||
548 | + public static class WEEKLY { } | ||
549 | + public static class MONTHLY { } | ||
550 | + public static class DAILY { } | ||
551 | + public static class HOURLY { } | ||
552 | + public static class CONTINOUS { } | ||
553 | + public const string DEFAULT = nameof(DAILY); | ||
554 | + } | ||
555 | + } | ||
556 | + public static class Enable | ||
557 | + { | ||
558 | + public static class Values | ||
559 | + { | ||
560 | + public const bool DEFAULT = true; | ||
561 | + } | ||
562 | + } | ||
563 | + public static class Run | ||
564 | + { | ||
565 | + public static class Values | ||
566 | + { | ||
567 | + public const bool DEFAULT = false; | ||
568 | + } | ||
569 | + } | ||
570 | + public static class Commandname { } | ||
571 | + } | ||
572 | + } | ||
573 | + } | ||
574 | + #endregion XmlStructure | ||
575 | + } | ||
576 | + #endregion ScheduledTask class | ||
577 | +} |
Vrh.Log4Pro.MaintenanceConsole/Manager - WebApplicationManager.cs
@@ -76,7 +76,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -76,7 +76,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
76 | else if (sr.Result == Menu.SelectionResult.Error) { continue; } | 76 | else if (sr.Result == Menu.SelectionResult.Error) { continue; } |
77 | else if (sr.Result == Menu.SelectionResult.Ok) { } | 77 | else if (sr.Result == Menu.SelectionResult.Ok) { } |
78 | else { } | 78 | else { } |
79 | - menuapplications.Execute(sr.SelectedKeyList); | 79 | + menuapplications.ExecuteSelection(sr.SelectedKeyList); |
80 | } | 80 | } |
81 | return null; | 81 | return null; |
82 | } | 82 | } |
@@ -149,14 +149,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -149,14 +149,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
149 | WebApplication d = dobj as WebApplication; | 149 | WebApplication d = dobj as WebApplication; |
150 | using (ServerManager sm = new ServerManager()) | 150 | using (ServerManager sm = new ServerManager()) |
151 | { | 151 | { |
152 | - try { WebApplicationManagerCore.GetPool(sm, d.Xml_PoolName)?.Stop(); } catch { Console.WriteLine($"Pool {d.Xml_PoolName} already stopped."); } | ||
153 | - try { WebApplicationManagerCore.GetSite(sm, d.Xml_SiteName)?.Stop(); } catch { Console.WriteLine($"Site {d.Xml_SiteName} already stopped."); } | 152 | + try { WebApplicationManagerCore.GetPool(sm, d.Xml_PoolName)?.Stop(); } catch { ColorConsole.WriteLine($"Pool {d.Xml_PoolName} already stopped."); } |
153 | + try { WebApplicationManagerCore.GetSite(sm, d.Xml_SiteName)?.Stop(); } catch { ColorConsole.WriteLine($"Site {d.Xml_SiteName} already stopped."); } | ||
154 | 154 | ||
155 | SiteStart(d, parameters); | 155 | SiteStart(d, parameters); |
156 | PoolStart(d, parameters); | 156 | PoolStart(d, parameters); |
157 | PoolRecycle(d, parameters); | 157 | PoolRecycle(d, parameters); |
158 | 158 | ||
159 | - Console.WriteLine($"Pool {d.Xml_PoolName} and site {d.Xml_SiteName} restarted."); | 159 | + ColorConsole.WriteLine($"Pool {d.Xml_PoolName} and site {d.Xml_SiteName} restarted."); |
160 | return parameters; | 160 | return parameters; |
161 | } | 161 | } |
162 | } | 162 | } |
@@ -173,14 +173,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -173,14 +173,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
173 | if (p != null && p.State == ObjectState.Stopped) { p.Start(); success = true; break; } | 173 | if (p != null && p.State == ObjectState.Stopped) { p.Start(); success = true; break; } |
174 | else | 174 | else |
175 | { | 175 | { |
176 | - Console.WriteLine($"Trying to start pool {d.Xml_PoolName} ... Press key 'X' to exit..."); | ||
177 | - if (Console.KeyAvailable) { if (Console.ReadKey().KeyChar.ToString().ToUpper() == "X") { break; } } | 176 | + ColorConsole.WriteLine($"Trying to start pool {d.Xml_PoolName} ... Press key 'X' to exit..."); |
177 | + if (ColorConsole.KeyAvailable) { if (ColorConsole.ReadKey().KeyChar.ToString().ToUpper() == "X") { break; } } | ||
178 | 178 | ||
179 | Thread.Sleep(1000); | 179 | Thread.Sleep(1000); |
180 | } | 180 | } |
181 | } | 181 | } |
182 | var successstr = success ? "started" : "NOT started"; | 182 | var successstr = success ? "started" : "NOT started"; |
183 | - Console.WriteLine($"{d.Xml_PoolName} {successstr}."); | 183 | + ColorConsole.WriteLine($"{d.Xml_PoolName} {successstr}."); |
184 | return parameters; | 184 | return parameters; |
185 | } | 185 | } |
186 | } | 186 | } |
@@ -196,13 +196,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -196,13 +196,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
196 | if (p != null && p.State == ObjectState.Started) { p.Recycle(); success = true; break; } | 196 | if (p != null && p.State == ObjectState.Started) { p.Recycle(); success = true; break; } |
197 | else | 197 | else |
198 | { | 198 | { |
199 | - Console.WriteLine($"Trying to recycle pool {d.Xml_PoolName} ... Press key 'X' to exit..."); | ||
200 | - if (Console.KeyAvailable) { if (Console.ReadKey().KeyChar.ToString().ToUpper() == "X") { break; } } | 199 | + ColorConsole.WriteLine($"Trying to recycle pool {d.Xml_PoolName} ... Press key 'X' to exit..."); |
200 | + if (ColorConsole.KeyAvailable) { if (ColorConsole.ReadKey().KeyChar.ToString().ToUpper() == "X") { break; } } | ||
201 | Thread.Sleep(1000); | 201 | Thread.Sleep(1000); |
202 | } | 202 | } |
203 | } | 203 | } |
204 | var successstr = success ? "recycled" : "NOT recycled"; | 204 | var successstr = success ? "recycled" : "NOT recycled"; |
205 | - Console.WriteLine($"{d.Xml_PoolName} {successstr}."); | 205 | + ColorConsole.WriteLine($"{d.Xml_PoolName} {successstr}."); |
206 | return parameters; | 206 | return parameters; |
207 | } | 207 | } |
208 | } | 208 | } |
@@ -218,14 +218,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -218,14 +218,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
218 | if (p != null && p.State == ObjectState.Started) { p.Stop(); success = true; break; } | 218 | if (p != null && p.State == ObjectState.Started) { p.Stop(); success = true; break; } |
219 | else | 219 | else |
220 | { | 220 | { |
221 | - Console.WriteLine($"Trying to stop pool {d.Xml_PoolName} ... Press key 'X' to exit..."); | ||
222 | - if (Console.KeyAvailable) { if (Console.ReadKey().KeyChar.ToString().ToUpper() == "X") { break; } } | 221 | + ColorConsole.WriteLine($"Trying to stop pool {d.Xml_PoolName} ... Press key 'X' to exit..."); |
222 | + if (ColorConsole.KeyAvailable) { if (ColorConsole.ReadKey().KeyChar.ToString().ToUpper() == "X") { break; } } | ||
223 | 223 | ||
224 | Thread.Sleep(1000); | 224 | Thread.Sleep(1000); |
225 | } | 225 | } |
226 | } | 226 | } |
227 | var successstr = success ? "stopped" : "NOT stopped"; | 227 | var successstr = success ? "stopped" : "NOT stopped"; |
228 | - Console.WriteLine($"{d.Xml_PoolName} {successstr}."); | 228 | + ColorConsole.WriteLine($"{d.Xml_PoolName} {successstr}."); |
229 | return parameters; | 229 | return parameters; |
230 | } | 230 | } |
231 | } | 231 | } |
@@ -241,13 +241,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -241,13 +241,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
241 | if (s != null && s.State == ObjectState.Stopped) { s.Start(); success = true; break; } | 241 | if (s != null && s.State == ObjectState.Stopped) { s.Start(); success = true; break; } |
242 | else | 242 | else |
243 | { | 243 | { |
244 | - Console.WriteLine($"Trying to start site {d.Xml_SiteName} ... Press key 'X' to exit..."); | ||
245 | - if (Console.KeyAvailable) { if (Console.ReadKey().KeyChar.ToString().ToUpper() == "X") { break; } } | 244 | + ColorConsole.WriteLine($"Trying to start site {d.Xml_SiteName} ... Press key 'X' to exit..."); |
245 | + if (ColorConsole.KeyAvailable) { if (ColorConsole.ReadKey().KeyChar.ToString().ToUpper() == "X") { break; } } | ||
246 | Thread.Sleep(1000); | 246 | Thread.Sleep(1000); |
247 | } | 247 | } |
248 | } | 248 | } |
249 | var successstr = success ? "started" : "NOT started"; | 249 | var successstr = success ? "started" : "NOT started"; |
250 | - Console.WriteLine($"{d.Xml_SiteName} {successstr}."); | 250 | + ColorConsole.WriteLine($"{d.Xml_SiteName} {successstr}."); |
251 | return parameters; | 251 | return parameters; |
252 | } | 252 | } |
253 | } | 253 | } |
@@ -263,13 +263,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -263,13 +263,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
263 | if (s != null && s.State == ObjectState.Started) { s.Stop(); success = true; break; } | 263 | if (s != null && s.State == ObjectState.Started) { s.Stop(); success = true; break; } |
264 | else | 264 | else |
265 | { | 265 | { |
266 | - Console.WriteLine($"Trying to stop site {d.Xml_SiteName} ... Press key 'X' to exit..."); | ||
267 | - if (Console.KeyAvailable) { if (Console.ReadKey().KeyChar.ToString().ToUpper() == "X") { break; } } | 266 | + ColorConsole.WriteLine($"Trying to stop site {d.Xml_SiteName} ... Press key 'X' to exit..."); |
267 | + if (ColorConsole.KeyAvailable) { if (ColorConsole.ReadKey().KeyChar.ToString().ToUpper() == "X") { break; } } | ||
268 | Thread.Sleep(1000); | 268 | Thread.Sleep(1000); |
269 | } | 269 | } |
270 | } | 270 | } |
271 | var successstr = success ? "stopped" : "NOT stopped"; | 271 | var successstr = success ? "stopped" : "NOT stopped"; |
272 | - Console.WriteLine($"{d.Xml_SiteName} {successstr}."); | 272 | + ColorConsole.WriteLine($"{d.Xml_SiteName} {successstr}."); |
273 | return parameters; | 273 | return parameters; |
274 | } | 274 | } |
275 | } | 275 | } |
@@ -277,14 +277,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -277,14 +277,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
277 | { | 277 | { |
278 | WebApplication d = dobj as WebApplication; | 278 | WebApplication d = dobj as WebApplication; |
279 | WebApplicationManagerCore.RegisterWebApplication(d.Xml_SiteName, d.Xml_PoolName, d.Xml_AppName, d.Xml_AppPhysicalPath, d.Xml_SitePhysicalPath, 8080, d.Xml_RecreatePool, d.Xml_RecreateSite, d.Xml_RecreateApp, d.Xml_PoolPipeLineMode); | 279 | WebApplicationManagerCore.RegisterWebApplication(d.Xml_SiteName, d.Xml_PoolName, d.Xml_AppName, d.Xml_AppPhysicalPath, d.Xml_SitePhysicalPath, 8080, d.Xml_RecreatePool, d.Xml_RecreateSite, d.Xml_RecreateApp, d.Xml_PoolPipeLineMode); |
280 | - Console.WriteLine($"{d.Xml_AppName} is registered in site {d.Xml_SiteName} using pool {d.Xml_PoolName}."); | 280 | + ColorConsole.WriteLine($"{d.Xml_AppName} is registered in site {d.Xml_SiteName} using pool {d.Xml_PoolName}."); |
281 | return parameters; | 281 | return parameters; |
282 | } | 282 | } |
283 | private static object Unregister(object dobj, object parameters) | 283 | private static object Unregister(object dobj, object parameters) |
284 | { | 284 | { |
285 | WebApplication d = dobj as WebApplication; | 285 | WebApplication d = dobj as WebApplication; |
286 | WebApplicationManagerCore.UnRegisterWebApplication(d.Xml_AppName, d.Xml_PoolName, d.Xml_SiteName, d.Xml_ForceRemovePool, d.Xml_ForceRemoveSite); | 286 | WebApplicationManagerCore.UnRegisterWebApplication(d.Xml_AppName, d.Xml_PoolName, d.Xml_SiteName, d.Xml_ForceRemovePool, d.Xml_ForceRemoveSite); |
287 | - Console.WriteLine($"{d.Xml_AppName} is unregistered from site {d.Xml_SiteName} and from pool {d.Xml_PoolName}."); | 287 | + ColorConsole.WriteLine($"{d.Xml_AppName} is unregistered from site {d.Xml_SiteName} and from pool {d.Xml_PoolName}."); |
288 | return parameters; | 288 | return parameters; |
289 | } | 289 | } |
290 | private static object SetImpersonateIdentity(object dobj, object parameters) | 290 | private static object SetImpersonateIdentity(object dobj, object parameters) |
@@ -304,22 +304,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -304,22 +304,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
304 | while(true) | 304 | while(true) |
305 | { | 305 | { |
306 | 306 | ||
307 | - Console.WriteLine($"Current user info: {olduserinfo}"); | ||
308 | - Console.WriteLine("Set impersonate-on status (true/false), then [Enter], EX=exit."); | ||
309 | - impersonate = Console.ReadLine().ToUpper(); | 307 | + ColorConsole.WriteLine($"Current user info: {olduserinfo}"); |
308 | + ColorConsole.WriteLine("Set impersonate-on status (true/false), then [Enter], EX=exit."); | ||
309 | + impersonate = ColorConsole.ReadLine().ToUpper(); | ||
310 | if (impersonate == "EX") { return null; } | 310 | if (impersonate == "EX") { return null; } |
311 | else if (impersonate == "FALSE") { break; } | 311 | else if (impersonate == "FALSE") { break; } |
312 | else if (impersonate == "TRUE") | 312 | else if (impersonate == "TRUE") |
313 | { | 313 | { |
314 | - Console.WriteLine("Enter username, then [Enter]."); | 314 | + ColorConsole.WriteLine("Enter username, then [Enter]."); |
315 | var un = !string.IsNullOrWhiteSpace(d.Xml_PoolUsername) ? $"empty={d.Xml_PoolUsername }," : ""; | 315 | var un = !string.IsNullOrWhiteSpace(d.Xml_PoolUsername) ? $"empty={d.Xml_PoolUsername }," : ""; |
316 | - Console.WriteLine($"{un}EX=exit"); | ||
317 | - username = Console.ReadLine().ToUpper(); | 316 | + ColorConsole.WriteLine($"{un}EX=exit"); |
317 | + username = ColorConsole.ReadLine().ToUpper(); | ||
318 | if (impersonate == "EX") { return null; } | 318 | if (impersonate == "EX") { return null; } |
319 | - Console.WriteLine("Enter password, then [Enter]"); | 319 | + ColorConsole.WriteLine("Enter password, then [Enter]"); |
320 | var pw = !string.IsNullOrWhiteSpace(d.Xml_PoolPassword) ? $"empty={d.Xml_PoolPassword}," : ""; | 320 | var pw = !string.IsNullOrWhiteSpace(d.Xml_PoolPassword) ? $"empty={d.Xml_PoolPassword}," : ""; |
321 | - Console.WriteLine($"{pw}EX=exit"); | ||
322 | - password = Console.ReadLine().ToUpper(); | 321 | + ColorConsole.WriteLine($"{pw}EX=exit"); |
322 | + password = ColorConsole.ReadLine().ToUpper(); | ||
323 | if (impersonate == "EX") { return null; } | 323 | if (impersonate == "EX") { return null; } |
324 | break; | 324 | break; |
325 | //bool valid = System.Web.ApplicationSerices.AuthenticationService.ValidateUser(username, password, mull); | 325 | //bool valid = System.Web.ApplicationSerices.AuthenticationService.ValidateUser(username, password, mull); |
@@ -333,8 +333,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -333,8 +333,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
333 | parameters = new Dictionary<string, string> { { "impersonate", impersonate }, { "username", username }, { "password", password }, }; | 333 | parameters = new Dictionary<string, string> { { "impersonate", impersonate }, { "username", username }, { "password", password }, }; |
334 | } | 334 | } |
335 | WebApplicationManagerCore.SetImpersonateIdentity(d.Xml_IdentityConfigFile, impersonate, username, password); | 335 | WebApplicationManagerCore.SetImpersonateIdentity(d.Xml_IdentityConfigFile, impersonate, username, password); |
336 | - Console.WriteLine($"Impersonate identity changed for webapp {d.Xml_AppName}."); | ||
337 | - Console.WriteLine($"From '{olduserinfo}' to '{WebApplicationManagerCore.GetImpersonateIdentityInfo(d.Xml_IdentityConfigFile)}'"); | 336 | + ColorConsole.WriteLine($"Impersonate identity changed for webapp {d.Xml_AppName}."); |
337 | + ColorConsole.WriteLine($"From '{olduserinfo}' to '{WebApplicationManagerCore.GetImpersonateIdentityInfo(d.Xml_IdentityConfigFile)}'"); | ||
338 | 338 | ||
339 | return parameters; | 339 | return parameters; |
340 | } | 340 | } |
@@ -351,16 +351,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -351,16 +351,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
351 | } | 351 | } |
352 | else | 352 | else |
353 | { | 353 | { |
354 | - Console.WriteLine($"Current user info: {olduserinfo}"); | ||
355 | - Console.WriteLine("Enter username, then [Enter]."); | ||
356 | - Console.WriteLine("Special usernames are: (Empty=API) "); | ||
357 | - Console.WriteLine($" (API) {nameof(ProcessModelIdentityType.ApplicationPoolIdentity)}"); | ||
358 | - Console.WriteLine($" (LSE) {nameof(ProcessModelIdentityType.LocalService)}"); | ||
359 | - Console.WriteLine($" (LSY) {nameof(ProcessModelIdentityType.LocalSystem)}"); | ||
360 | - Console.WriteLine($" (NSE) {nameof(ProcessModelIdentityType.NetworkService)}"); | 354 | + ColorConsole.WriteLine($"Current user info: {olduserinfo}"); |
355 | + ColorConsole.WriteLine("Enter username, then [Enter]."); | ||
356 | + ColorConsole.WriteLine("Special usernames are: (Empty=API) "); | ||
357 | + ColorConsole.WriteLine($" (API) {nameof(ProcessModelIdentityType.ApplicationPoolIdentity)}"); | ||
358 | + ColorConsole.WriteLine($" (LSE) {nameof(ProcessModelIdentityType.LocalService)}"); | ||
359 | + ColorConsole.WriteLine($" (LSY) {nameof(ProcessModelIdentityType.LocalSystem)}"); | ||
360 | + ColorConsole.WriteLine($" (NSE) {nameof(ProcessModelIdentityType.NetworkService)}"); | ||
361 | ColorConsole.WriteLine(); | 361 | ColorConsole.WriteLine(); |
362 | ColorConsole.Write(" (EX) ", ConsoleColor.Red); ColorConsole.WriteLine("Exit"); | 362 | ColorConsole.Write(" (EX) ", ConsoleColor.Red); ColorConsole.WriteLine("Exit"); |
363 | - username = Console.ReadLine().ToUpper(); | 363 | + username = ColorConsole.ReadLine().ToUpper(); |
364 | if (username == "EX") { return null; } | 364 | if (username == "EX") { return null; } |
365 | if (string.IsNullOrEmpty(username)) { username = nameof(ProcessModelIdentityType.ApplicationPoolIdentity); }; | 365 | if (string.IsNullOrEmpty(username)) { username = nameof(ProcessModelIdentityType.ApplicationPoolIdentity); }; |
366 | if (username == "API" || username == nameof(ProcessModelIdentityType.ApplicationPoolIdentity)) { username = nameof(ProcessModelIdentityType.ApplicationPoolIdentity); } | 366 | if (username == "API" || username == nameof(ProcessModelIdentityType.ApplicationPoolIdentity)) { username = nameof(ProcessModelIdentityType.ApplicationPoolIdentity); } |
@@ -369,14 +369,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -369,14 +369,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
369 | else if (username == "NSE" || username == nameof(ProcessModelIdentityType.NetworkService)) { username = nameof(ProcessModelIdentityType.NetworkService); } | 369 | else if (username == "NSE" || username == nameof(ProcessModelIdentityType.NetworkService)) { username = nameof(ProcessModelIdentityType.NetworkService); } |
370 | else | 370 | else |
371 | { | 371 | { |
372 | - Console.WriteLine("Enter password, then [Enter]"); | ||
373 | - password = Console.ReadLine().ToUpper(); | 372 | + ColorConsole.WriteLine("Enter password, then [Enter]"); |
373 | + password = ColorConsole.ReadLine().ToUpper(); | ||
374 | //bool valid = System.Web.ApplicationSerices.AuthenticationService.ValidateUser(username, password, mull); | 374 | //bool valid = System.Web.ApplicationSerices.AuthenticationService.ValidateUser(username, password, mull); |
375 | } | 375 | } |
376 | parameters = new Dictionary<string, string> { { "username", username }, { "password", password }, }; | 376 | parameters = new Dictionary<string, string> { { "username", username }, { "password", password }, }; |
377 | } | 377 | } |
378 | WebApplicationManagerCore.SetPoolUserAccount(d.Xml_AppName, d.Xml_SiteName, username, password); | 378 | WebApplicationManagerCore.SetPoolUserAccount(d.Xml_AppName, d.Xml_SiteName, username, password); |
379 | - Console.WriteLine($"Pool user changed from {olduserinfo} to {WebApplicationManagerCore.GetUserInfo(d.Xml_PoolName)} for pool {d.Xml_PoolName}."); | 379 | + ColorConsole.WriteLine($"Pool user changed from {olduserinfo} to {WebApplicationManagerCore.GetUserInfo(d.Xml_PoolName)} for pool {d.Xml_PoolName}."); |
380 | return parameters; | 380 | return parameters; |
381 | } | 381 | } |
382 | #endregion | 382 | #endregion |
Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs
@@ -48,8 +48,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -48,8 +48,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
48 | if (sr.Result == Menu.SelectionResult.Exit) { break; } | 48 | if (sr.Result == Menu.SelectionResult.Exit) { break; } |
49 | else if (sr.Result == Menu.SelectionResult.None) { continue; } | 49 | else if (sr.Result == Menu.SelectionResult.None) { continue; } |
50 | else if (sr.Result == Menu.SelectionResult.Error) { continue; } | 50 | else if (sr.Result == Menu.SelectionResult.Error) { continue; } |
51 | - menufunctions.SetParameters(sr,config); | ||
52 | - menufunctions.Execute(sr.SelectedKeyList); | 51 | + menufunctions.SetExecutorParameters(sr,config); |
52 | + menufunctions.ExecuteSelection(sr.SelectedKeyList); | ||
53 | } | 53 | } |
54 | return null; | 54 | return null; |
55 | } | 55 | } |
Vrh.Log4Pro.MaintenanceConsole/Program.cs
@@ -9,6 +9,7 @@ using System.Management; | @@ -9,6 +9,7 @@ using System.Management; | ||
9 | using System.Diagnostics; | 9 | using System.Diagnostics; |
10 | 10 | ||
11 | using Vrh.XmlProcessing; | 11 | using Vrh.XmlProcessing; |
12 | +using VRH.Common; | ||
12 | using System.Xml.Linq; | 13 | using System.Xml.Linq; |
13 | 14 | ||
14 | namespace Vrh.Log4Pro.MaintenanceConsole | 15 | namespace Vrh.Log4Pro.MaintenanceConsole |
@@ -17,11 +18,21 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -17,11 +18,21 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
17 | { | 18 | { |
18 | static void Main(string[] args) | 19 | static void Main(string[] args) |
19 | { | 20 | { |
20 | - try { Console.SetWindowSize(120, 64); } | 21 | + ColorConsole.ReadLine("Press a key to start..."); |
22 | + var appconfigpath = CommandLine.GetCommandLineArgument(args, "-APPCONFIG"); | ||
23 | + CommandLine.SetAppConfigFile(appconfigpath); | ||
24 | + | ||
25 | + try { ColorConsole.SetWindowSize(120, 64); } | ||
21 | catch (Exception ex) | 26 | catch (Exception ex) |
22 | { | 27 | { |
23 | - ColorConsole.WriteLine("Change the size of the console fonts smaller!"); | ||
24 | - Console.ReadKey(); | 28 | + ColorConsole.WriteLine("Change the size of the console fonts smaller!"); |
29 | + ColorConsole.ReadKey(); | ||
30 | + return; | ||
31 | + } | ||
32 | + if (!Tools.IsElevated) | ||
33 | + { | ||
34 | + ColorConsole.WriteLine("Run as administartor!"); | ||
35 | + ColorConsole.ReadKey(); | ||
25 | return; | 36 | return; |
26 | } | 37 | } |
27 | 38 | ||
@@ -29,12 +40,24 @@ namespace Vrh.Log4Pro.MaintenanceConsole | @@ -29,12 +40,24 @@ namespace Vrh.Log4Pro.MaintenanceConsole | ||
29 | .AddMenuItem(new Menu.Item("WAM", "Web Application Manager", WebApplicationManager.Execute)) | 40 | .AddMenuItem(new Menu.Item("WAM", "Web Application Manager", WebApplicationManager.Execute)) |
30 | .AddMenuItem(new Menu.Item("WSM", "Windows Service Manager", WindowsServiceManager.Execute)) | 41 | .AddMenuItem(new Menu.Item("WSM", "Windows Service Manager", WindowsServiceManager.Execute)) |
31 | .AddMenuItem(new Menu.Item("FCL", "File Cleaner Manager", FileCleanerManager.Execute)) | 42 | .AddMenuItem(new Menu.Item("FCL", "File Cleaner Manager", FileCleanerManager.Execute)) |
43 | + .AddMenuItem(new Menu.Item("SCH", "Scheduled Task Manager", ScheduledTaskmanagerManager.Execute)) | ||
32 | .AddMenuItem(new Menu.ItemSeparator('-')) | 44 | .AddMenuItem(new Menu.ItemSeparator('-')) |
33 | .AddMenuItem(new Menu.Item("TOL", "Maintenance tools", MaintenanceToolManager.Execute)) | 45 | .AddMenuItem(new Menu.Item("TOL", "Maintenance tools", MaintenanceToolManager.Execute)) |
34 | .SetSelectionMode(Menu.SelectionMode.Single); | 46 | .SetSelectionMode(Menu.SelectionMode.Single); |
35 | 47 | ||
36 | - mm.ExecuteMenu(); | ||
37 | - ColorConsole.WriteLine("Press any key to exit..."); Console.ReadKey(); | 48 | + var commandmode = !string.IsNullOrEmpty(CommandLine.GetCommandLineArgument(args, "-MODULE")); |
49 | + if (commandmode) | ||
50 | + { | ||
51 | + var silentmode = !string.IsNullOrEmpty(CommandLine.GetCommandLineArgument(args, "-SILENT", switchtype: true)); | ||
52 | + ColorConsole.SetSilentMode(silentmode); | ||
53 | + Menu.SetCommandModeAllMenus(); | ||
54 | + mm.ExecuteCmd(args); | ||
55 | + } | ||
56 | + else | ||
57 | + { | ||
58 | + mm.ExecuteMenu(); | ||
59 | + ColorConsole.PressAnykeyToContinue(); | ||
60 | + } | ||
38 | } | 61 | } |
39 | } | 62 | } |
40 | } | 63 | } |
Vrh.Log4Pro.MaintenanceConsole/Vrh.Log4Pro.MaintenanceConsole.csproj
1 | <?xml version="1.0" encoding="utf-8"?> | 1 | <?xml version="1.0" encoding="utf-8"?> |
2 | <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | 2 | <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
3 | - <Import Project="..\packages\EntityFramework.6.4.0\build\EntityFramework.props" Condition="Exists('..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" /> | 3 | + <Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.props" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" /> |
4 | <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> | 4 | <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
5 | <PropertyGroup> | 5 | <PropertyGroup> |
6 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | 6 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
@@ -37,10 +37,10 @@ | @@ -37,10 +37,10 @@ | ||
37 | </PropertyGroup> | 37 | </PropertyGroup> |
38 | <ItemGroup> | 38 | <ItemGroup> |
39 | <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> | 39 | <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> |
40 | - <HintPath>..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.dll</HintPath> | 40 | + <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath> |
41 | </Reference> | 41 | </Reference> |
42 | <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> | 42 | <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> |
43 | - <HintPath>..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.SqlServer.dll</HintPath> | 43 | + <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath> |
44 | </Reference> | 44 | </Reference> |
45 | <Reference Include="Microsoft.Web.Administration, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> | 45 | <Reference Include="Microsoft.Web.Administration, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> |
46 | <HintPath>..\packages\Microsoft.Web.Administration.11.1.0\lib\netstandard1.5\Microsoft.Web.Administration.dll</HintPath> | 46 | <HintPath>..\packages\Microsoft.Web.Administration.11.1.0\lib\netstandard1.5\Microsoft.Web.Administration.dll</HintPath> |
@@ -145,8 +145,8 @@ | @@ -145,8 +145,8 @@ | ||
145 | <Reference Include="Microsoft.CSharp" /> | 145 | <Reference Include="Microsoft.CSharp" /> |
146 | <Reference Include="System.Data" /> | 146 | <Reference Include="System.Data" /> |
147 | <Reference Include="System.Xml" /> | 147 | <Reference Include="System.Xml" /> |
148 | - <Reference Include="VRH.Common, Version=2.19.0.0, Culture=neutral, processorArchitecture=MSIL"> | ||
149 | - <HintPath>..\packages\VRH.Common.2.19.0\lib\net45\VRH.Common.dll</HintPath> | 148 | + <Reference Include="VRH.Common, Version=2.19.1.0, Culture=neutral, processorArchitecture=MSIL"> |
149 | + <HintPath>..\packages\VRH.Common.2.19.1\lib\net45\VRH.Common.dll</HintPath> | ||
150 | </Reference> | 150 | </Reference> |
151 | <Reference Include="Vrh.XmlProcessing, Version=1.23.0.0, Culture=neutral, processorArchitecture=MSIL"> | 151 | <Reference Include="Vrh.XmlProcessing, Version=1.23.0.0, Culture=neutral, processorArchitecture=MSIL"> |
152 | <HintPath>..\packages\Vrh.XmlProcessing.1.23.0\lib\net45\Vrh.XmlProcessing.dll</HintPath> | 152 | <HintPath>..\packages\Vrh.XmlProcessing.1.23.0\lib\net45\Vrh.XmlProcessing.dll</HintPath> |
@@ -156,6 +156,8 @@ | @@ -156,6 +156,8 @@ | ||
156 | <Compile Include="ConsoleFunction - CommandLineParser.cs" /> | 156 | <Compile Include="ConsoleFunction - CommandLineParser.cs" /> |
157 | <Compile Include="ConsoleFunction - ColorConsole.cs" /> | 157 | <Compile Include="ConsoleFunction - ColorConsole.cs" /> |
158 | <Compile Include="ConsoleFunction - Menu.cs" /> | 158 | <Compile Include="ConsoleFunction - Menu.cs" /> |
159 | + <Compile Include="ConsoleFunction - Tools.cs" /> | ||
160 | + <Compile Include="Manager - ScheduledTaskManager.cs" /> | ||
159 | <Compile Include="Manager - WindowsServiceManager.cs" /> | 161 | <Compile Include="Manager - WindowsServiceManager.cs" /> |
160 | <Compile Include="Manager - FileCleanerManager.cs" /> | 162 | <Compile Include="Manager - FileCleanerManager.cs" /> |
161 | <Compile Include="Manager - MaintenanceToolManager.cs" /> | 163 | <Compile Include="Manager - MaintenanceToolManager.cs" /> |
@@ -179,13 +181,14 @@ | @@ -179,13 +181,14 @@ | ||
179 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> | 181 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> |
180 | </Content> | 182 | </Content> |
181 | </ItemGroup> | 183 | </ItemGroup> |
184 | + <ItemGroup /> | ||
182 | <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | 185 | <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
183 | <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | 186 | <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> |
184 | <PropertyGroup> | 187 | <PropertyGroup> |
185 | <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> | 188 | <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> |
186 | </PropertyGroup> | 189 | </PropertyGroup> |
187 | - <Error Condition="!Exists('..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.0\build\EntityFramework.props'))" /> | ||
188 | - <Error Condition="!Exists('..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.0\build\EntityFramework.targets'))" /> | 190 | + <Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.props'))" /> |
191 | + <Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.targets'))" /> | ||
189 | </Target> | 192 | </Target> |
190 | - <Import Project="..\packages\EntityFramework.6.4.0\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" /> | 193 | + <Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" /> |
191 | </Project> | 194 | </Project> |
192 | \ No newline at end of file | 195 | \ No newline at end of file |
Vrh.Log4Pro.MaintenanceConsole/packages.config
1 | <?xml version="1.0" encoding="utf-8"?> | 1 | <?xml version="1.0" encoding="utf-8"?> |
2 | <packages> | 2 | <packages> |
3 | - <package id="EntityFramework" version="6.4.0" targetFramework="net462" /> | 3 | + <package id="EntityFramework" version="6.4.4" targetFramework="net462" /> |
4 | <package id="Microsoft.NETCore.Platforms" version="1.0.1" targetFramework="net462" /> | 4 | <package id="Microsoft.NETCore.Platforms" version="1.0.1" targetFramework="net462" /> |
5 | <package id="Microsoft.Web.Administration" version="11.1.0" targetFramework="net462" /> | 5 | <package id="Microsoft.Web.Administration" version="11.1.0" targetFramework="net462" /> |
6 | <package id="Microsoft.Win32.Primitives" version="4.0.1" targetFramework="net462" /> | 6 | <package id="Microsoft.Win32.Primitives" version="4.0.1" targetFramework="net462" /> |
@@ -55,6 +55,6 @@ | @@ -55,6 +55,6 @@ | ||
55 | <package id="System.Threading.Timer" version="4.0.1" targetFramework="net462" /> | 55 | <package id="System.Threading.Timer" version="4.0.1" targetFramework="net462" /> |
56 | <package id="System.Xml.ReaderWriter" version="4.0.11" targetFramework="net462" /> | 56 | <package id="System.Xml.ReaderWriter" version="4.0.11" targetFramework="net462" /> |
57 | <package id="System.Xml.XDocument" version="4.0.11" targetFramework="net462" /> | 57 | <package id="System.Xml.XDocument" version="4.0.11" targetFramework="net462" /> |
58 | - <package id="VRH.Common" version="2.19.0" targetFramework="net462" /> | 58 | + <package id="VRH.Common" version="2.19.1" targetFramework="net462" /> |
59 | <package id="Vrh.XmlProcessing" version="1.23.0" targetFramework="net462" /> | 59 | <package id="Vrh.XmlProcessing" version="1.23.0" targetFramework="net462" /> |
60 | </packages> | 60 | </packages> |
61 | \ No newline at end of file | 61 | \ No newline at end of file |