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 | 1 | <?xml version="1.0" encoding="utf-8"?> |
2 | 2 | <configuration> |
3 | 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 | 7 | <startup> |
8 | 8 | <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" /> |
9 | 9 | </startup> | ... | ... |
Vrh.Log4Pro.MaintenanceConsole/Config.xml
... | ... | @@ -187,4 +187,14 @@ |
187 | 187 | <FolderToClean Directory="@DIR_BAKTMP@" Recurse="True" RemoveEmptyFolder="False" IncludeMask="*.*" /> |
188 | 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 | 200 | </Configuration> |
191 | 201 | \ No newline at end of file | ... | ... |
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - ColorConsole.cs
... | ... | @@ -16,6 +16,36 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
16 | 16 | #region ColorConsole |
17 | 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 | 49 | public static string WideString(string txt) |
20 | 50 | { |
21 | 51 | if (txt == null) { return null; }; |
... | ... | @@ -25,18 +55,116 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
25 | 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 | 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 | 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 | 152 | Write(text, f, b, bracket,prefix,suffix); |
36 | 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 | 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 | 168 | if (!string.IsNullOrEmpty(prefix)) { Write(prefix); } |
41 | 169 | if (!string.IsNullOrEmpty(bracket) && bracket.Length==1) { bracket = bracket + bracket; } |
42 | 170 | if (!string.IsNullOrEmpty(bracket)) { Console.Write($"{bracket[0]}"); } | ... | ... |
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - CommandLineParser.cs
... | ... | @@ -135,8 +135,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
135 | 135 | Test(44,"this \"is a\" test", new[] { "this", "is a", "test" }); |
136 | 136 | Test(45,"\"C:\\Program Files\"", new[] { "C:\\Program Files" }); |
137 | 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 | 141 | static void Test(int id,string cmd, string[] r) |
142 | 142 | { |
... | ... | @@ -149,28 +149,28 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
149 | 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 | 156 | return; |
157 | 157 | } |
158 | 158 | for (int i = 0; i < r.Length; i++) |
159 | 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 | 165 | return; |
166 | 166 | } |
167 | 167 | } |
168 | 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 | 174 | return; |
175 | 175 | } |
176 | 176 | } | ... | ... |
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Menu.cs
... | ... | @@ -11,11 +11,12 @@ using System.Management; |
11 | 11 | using System.Diagnostics; |
12 | 12 | |
13 | 13 | using Vrh.XmlProcessing; |
14 | +using VRH.Common; | |
14 | 15 | using System.Xml.Linq; |
15 | 16 | |
16 | 17 | namespace Vrh.Log4Pro.MaintenanceConsole |
17 | 18 | { |
18 | - public class Menu | |
19 | + public class Menu | |
19 | 20 | { |
20 | 21 | public delegate Object MenuItemExecutorFunc(Object p, Object o); |
21 | 22 | public delegate Object MenuItemDisplayerFunc(Object p, int i); |
... | ... | @@ -25,30 +26,71 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
25 | 26 | private string Title { get { return ColorConsole.WideString(title); } set { title = value; } } |
26 | 27 | private MenuItemDisplayerFunc MenuItemDisplayer; |
27 | 28 | private SelectionMode selectionMode = Menu.SelectionMode.Multi; |
29 | + private static bool commandModeAllMenus = false; | |
30 | + private bool commandMode = false; | |
28 | 31 | private int HeaderWidth = 9; |
29 | 32 | private string SelectionPrompt = "Make Your selection!"; |
30 | 33 | #endregion private fields |
31 | 34 | |
32 | 35 | #region public properties |
33 | 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 | 38 | #endregion public properties |
36 | 39 | |
37 | 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 | 70 | public Menu SetMenuItemDisplayer(MenuItemDisplayerFunc displayer) |
39 | 71 | { |
40 | 72 | MenuItemDisplayer = displayer; |
41 | 73 | return this; |
42 | 74 | } |
43 | 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 | 82 | MenuItemList.Add(mi); |
48 | 83 | if (string.IsNullOrWhiteSpace(mi.Key)) { mi.Key = $"#$KEY{MenuItemList.IndexOf(mi)}"; } |
49 | 84 | return this; |
50 | 85 | } |
51 | 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 | 94 | public void ExecuteMenu() |
53 | 95 | { |
54 | 96 | try |
... | ... | @@ -61,65 +103,69 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
61 | 103 | if (sr.Result == Menu.SelectionResult.Exit) { return; } |
62 | 104 | else if (sr.Result == Menu.SelectionResult.None) { continue; } |
63 | 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 | 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 | 116 | public void DisplayTitle() |
75 | 117 | { |
76 | - Console.Clear(); | |
118 | + if (GetCommandMode()) { return; } | |
119 | + | |
120 | + ColorConsole.Clear(); | |
77 | 121 | ColorConsole.WriteLine(Title, ConsoleColor.White); |
78 | 122 | ColorConsole.WriteLine(new string('-', Title.Length)); |
79 | 123 | } |
80 | 124 | public void DisplayItems(int columns = 1, int columnlength = 0) |
81 | 125 | { |
126 | + if (GetCommandMode()) { return; } | |
127 | + | |
82 | 128 | int columncounter = 0; |
83 | 129 | ColorConsole.WriteLine(); |
84 | 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 | 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 | 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 | 142 | ColorConsole.WriteLine(new string(menuitem.SeparatorChar, seplen)); |
97 | 143 | continue; |
98 | 144 | } |
99 | 145 | ColorConsole.Write($"["); |
100 | 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 | 149 | ColorConsole.Write($":"); |
104 | 150 | ColorConsole.Write(menuitem.Key, ConsoleColor.Yellow); |
105 | 151 | } |
106 | 152 | ColorConsole.Write($"]"); |
107 | - Console.SetCursorPosition(columnlength * columncounter+HeaderWidth, Console.CursorTop); | |
153 | + ColorConsole.SetCursorPosition(columnlength * columncounter + HeaderWidth, ColorConsole.CursorTop); | |
108 | 154 | |
109 | 155 | if (!string.IsNullOrEmpty(menuitem.Text)) |
110 | 156 | { |
111 | - ColorConsole.Write(menuitem.Text); | |
157 | + ColorConsole.Write(menuitem.Text); | |
112 | 158 | } |
113 | 159 | if (columns == 1) |
114 | 160 | { |
115 | 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 | 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 | 169 | if (str == null) { break; } |
124 | 170 | } |
125 | 171 | } |
... | ... | @@ -130,49 +176,63 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
130 | 176 | if (columncounter == columns) { ColorConsole.WriteLine(); columncounter = 0; } |
131 | 177 | else |
132 | 178 | { |
133 | - Console.SetCursorPosition(columnlength * columncounter - 2, Console.CursorTop); | |
179 | + ColorConsole.SetCursorPosition(columnlength * columncounter - 2, ColorConsole.CursorTop); | |
134 | 180 | ColorConsole.Write(" "); |
135 | 181 | } |
136 | 182 | } |
137 | 183 | i++; |
138 | 184 | } |
139 | 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 | 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 | 201 | public List<string> SelectedKeyList = null; |
149 | 202 | public SelectionResult Result; |
150 | 203 | public List<object> SelectedParameterList; |
151 | 204 | } |
152 | 205 | public enum SelectionResult { Exit, None, Error, Ok, } |
153 | 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 | 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 | 237 | if (selectionliststr == "EX") |
178 | 238 | { |
... | ... | @@ -186,37 +246,37 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
186 | 246 | result.SelectedKeyList = null; |
187 | 247 | return result; |
188 | 248 | } |
189 | - else if (selectionMode == SelectionMode.Multi && selectionliststr == "*") | |
249 | + else if (selectionMode == SelectionMode.Multi && selectionliststr == "*") | |
190 | 250 | { |
191 | 251 | selectionKeyList = new List<string>(); |
192 | 252 | selectionParList = new List<object>(); |
193 | 253 | var i = 1; |
194 | - foreach (var mi in MenuItemList) | |
195 | - { | |
254 | + foreach (var mi in MenuItemList) | |
255 | + { | |
196 | 256 | selectionKeyList.Add(mi.Key); |
197 | 257 | selectionParList.Add(mi.Parameters); |
198 | 258 | } |
199 | 259 | result.Result = SelectionResult.Ok; |
200 | 260 | result.SelectedKeyList = selectionKeyList; |
201 | - result.SelectedParameterList= selectionParList; | |
202 | - return result; | |
261 | + result.SelectedParameterList = selectionParList; | |
262 | + return result; | |
203 | 263 | } |
204 | 264 | selectionKeyList = new List<string>(); |
205 | 265 | selectionParList = new List<object>(); |
206 | 266 | foreach (var selection in selectionliststr.Split(',').ToList()) |
207 | 267 | { |
208 | 268 | string _selection = selection; |
209 | - object _parameters=null; | |
269 | + object _parameters = null; | |
210 | 270 | if (!MenuKeyList.Contains(_selection)) |
211 | 271 | { |
212 | 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 | 275 | result.Result = SelectionResult.Error; |
216 | 276 | result.SelectedKeyList = null; |
217 | 277 | return result; |
218 | 278 | } |
219 | - _selection = GetItemKey(indexselection-1); | |
279 | + _selection = GetItemKey(indexselection - 1); | |
220 | 280 | _parameters = GetItem(indexselection - 1).Parameters; |
221 | 281 | } |
222 | 282 | selectionKeyList.Add(_selection); |
... | ... | @@ -227,15 +287,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
227 | 287 | result.SelectedParameterList = selectionParList; |
228 | 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 | 292 | object o = null; |
241 | 293 | foreach (var mi in MenuItemList) |
... | ... | @@ -245,7 +297,20 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
245 | 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 | 315 | public MenuItemExecutorFunc GetExecutor(string key) |
251 | 316 | { |
... | ... | @@ -278,7 +343,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
278 | 343 | { |
279 | 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 | 348 | foreach (var mi in this.MenuItemList) |
284 | 349 | { | ... | ... |
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools.cs
0 → 100644
... | ... | @@ -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 | 42 | if (sr.Result == Menu.SelectionResult.Exit) { break; } |
43 | 43 | else if (sr.Result == Menu.SelectionResult.None) { continue; } |
44 | 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 | 48 | return null; |
49 | 49 | } |
... | ... | @@ -309,7 +309,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
309 | 309 | #endregion GetDefinitionList |
310 | 310 | } |
311 | 311 | #endregion FileCleanerManagerCoreXmlProcessor class |
312 | - #region WindowsService class | |
312 | + | |
313 | + #region FolderToClean class | |
313 | 314 | public class FolderToClean : XmlLinqBase |
314 | 315 | { |
315 | 316 | #region fields |
... | ... | @@ -499,6 +500,5 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
499 | 500 | } |
500 | 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 | 43 | if (sr.Result == Menu.SelectionResult.Exit) { break; } |
44 | 44 | else if (sr.Result == Menu.SelectionResult.None) { continue; } |
45 | 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 | 49 | return null; |
50 | 50 | } |
... | ... | @@ -80,7 +80,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
80 | 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 | 85 | return o; |
86 | 86 | } | ... | ... |
Vrh.Log4Pro.MaintenanceConsole/Manager - ScheduledTaskManager.cs
0 → 100644
... | ... | @@ -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 | 76 | else if (sr.Result == Menu.SelectionResult.Error) { continue; } |
77 | 77 | else if (sr.Result == Menu.SelectionResult.Ok) { } |
78 | 78 | else { } |
79 | - menuapplications.Execute(sr.SelectedKeyList); | |
79 | + menuapplications.ExecuteSelection(sr.SelectedKeyList); | |
80 | 80 | } |
81 | 81 | return null; |
82 | 82 | } |
... | ... | @@ -149,14 +149,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
149 | 149 | WebApplication d = dobj as WebApplication; |
150 | 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 | 155 | SiteStart(d, parameters); |
156 | 156 | PoolStart(d, parameters); |
157 | 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 | 160 | return parameters; |
161 | 161 | } |
162 | 162 | } |
... | ... | @@ -173,14 +173,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
173 | 173 | if (p != null && p.State == ObjectState.Stopped) { p.Start(); success = true; break; } |
174 | 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 | 179 | Thread.Sleep(1000); |
180 | 180 | } |
181 | 181 | } |
182 | 182 | var successstr = success ? "started" : "NOT started"; |
183 | - Console.WriteLine($"{d.Xml_PoolName} {successstr}."); | |
183 | + ColorConsole.WriteLine($"{d.Xml_PoolName} {successstr}."); | |
184 | 184 | return parameters; |
185 | 185 | } |
186 | 186 | } |
... | ... | @@ -196,13 +196,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
196 | 196 | if (p != null && p.State == ObjectState.Started) { p.Recycle(); success = true; break; } |
197 | 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 | 201 | Thread.Sleep(1000); |
202 | 202 | } |
203 | 203 | } |
204 | 204 | var successstr = success ? "recycled" : "NOT recycled"; |
205 | - Console.WriteLine($"{d.Xml_PoolName} {successstr}."); | |
205 | + ColorConsole.WriteLine($"{d.Xml_PoolName} {successstr}."); | |
206 | 206 | return parameters; |
207 | 207 | } |
208 | 208 | } |
... | ... | @@ -218,14 +218,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
218 | 218 | if (p != null && p.State == ObjectState.Started) { p.Stop(); success = true; break; } |
219 | 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 | 224 | Thread.Sleep(1000); |
225 | 225 | } |
226 | 226 | } |
227 | 227 | var successstr = success ? "stopped" : "NOT stopped"; |
228 | - Console.WriteLine($"{d.Xml_PoolName} {successstr}."); | |
228 | + ColorConsole.WriteLine($"{d.Xml_PoolName} {successstr}."); | |
229 | 229 | return parameters; |
230 | 230 | } |
231 | 231 | } |
... | ... | @@ -241,13 +241,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
241 | 241 | if (s != null && s.State == ObjectState.Stopped) { s.Start(); success = true; break; } |
242 | 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 | 246 | Thread.Sleep(1000); |
247 | 247 | } |
248 | 248 | } |
249 | 249 | var successstr = success ? "started" : "NOT started"; |
250 | - Console.WriteLine($"{d.Xml_SiteName} {successstr}."); | |
250 | + ColorConsole.WriteLine($"{d.Xml_SiteName} {successstr}."); | |
251 | 251 | return parameters; |
252 | 252 | } |
253 | 253 | } |
... | ... | @@ -263,13 +263,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
263 | 263 | if (s != null && s.State == ObjectState.Started) { s.Stop(); success = true; break; } |
264 | 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 | 268 | Thread.Sleep(1000); |
269 | 269 | } |
270 | 270 | } |
271 | 271 | var successstr = success ? "stopped" : "NOT stopped"; |
272 | - Console.WriteLine($"{d.Xml_SiteName} {successstr}."); | |
272 | + ColorConsole.WriteLine($"{d.Xml_SiteName} {successstr}."); | |
273 | 273 | return parameters; |
274 | 274 | } |
275 | 275 | } |
... | ... | @@ -277,14 +277,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
277 | 277 | { |
278 | 278 | WebApplication d = dobj as WebApplication; |
279 | 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 | 281 | return parameters; |
282 | 282 | } |
283 | 283 | private static object Unregister(object dobj, object parameters) |
284 | 284 | { |
285 | 285 | WebApplication d = dobj as WebApplication; |
286 | 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 | 288 | return parameters; |
289 | 289 | } |
290 | 290 | private static object SetImpersonateIdentity(object dobj, object parameters) |
... | ... | @@ -304,22 +304,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
304 | 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 | 310 | if (impersonate == "EX") { return null; } |
311 | 311 | else if (impersonate == "FALSE") { break; } |
312 | 312 | else if (impersonate == "TRUE") |
313 | 313 | { |
314 | - Console.WriteLine("Enter username, then [Enter]."); | |
314 | + ColorConsole.WriteLine("Enter username, then [Enter]."); | |
315 | 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 | 318 | if (impersonate == "EX") { return null; } |
319 | - Console.WriteLine("Enter password, then [Enter]"); | |
319 | + ColorConsole.WriteLine("Enter password, then [Enter]"); | |
320 | 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 | 323 | if (impersonate == "EX") { return null; } |
324 | 324 | break; |
325 | 325 | //bool valid = System.Web.ApplicationSerices.AuthenticationService.ValidateUser(username, password, mull); |
... | ... | @@ -333,8 +333,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
333 | 333 | parameters = new Dictionary<string, string> { { "impersonate", impersonate }, { "username", username }, { "password", password }, }; |
334 | 334 | } |
335 | 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 | 339 | return parameters; |
340 | 340 | } |
... | ... | @@ -351,16 +351,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
351 | 351 | } |
352 | 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 | 361 | ColorConsole.WriteLine(); |
362 | 362 | ColorConsole.Write(" (EX) ", ConsoleColor.Red); ColorConsole.WriteLine("Exit"); |
363 | - username = Console.ReadLine().ToUpper(); | |
363 | + username = ColorConsole.ReadLine().ToUpper(); | |
364 | 364 | if (username == "EX") { return null; } |
365 | 365 | if (string.IsNullOrEmpty(username)) { username = nameof(ProcessModelIdentityType.ApplicationPoolIdentity); }; |
366 | 366 | if (username == "API" || username == nameof(ProcessModelIdentityType.ApplicationPoolIdentity)) { username = nameof(ProcessModelIdentityType.ApplicationPoolIdentity); } |
... | ... | @@ -369,14 +369,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
369 | 369 | else if (username == "NSE" || username == nameof(ProcessModelIdentityType.NetworkService)) { username = nameof(ProcessModelIdentityType.NetworkService); } |
370 | 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 | 374 | //bool valid = System.Web.ApplicationSerices.AuthenticationService.ValidateUser(username, password, mull); |
375 | 375 | } |
376 | 376 | parameters = new Dictionary<string, string> { { "username", username }, { "password", password }, }; |
377 | 377 | } |
378 | 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 | 380 | return parameters; |
381 | 381 | } |
382 | 382 | #endregion | ... | ... |
Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs
... | ... | @@ -48,8 +48,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
48 | 48 | if (sr.Result == Menu.SelectionResult.Exit) { break; } |
49 | 49 | else if (sr.Result == Menu.SelectionResult.None) { continue; } |
50 | 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 | 54 | return null; |
55 | 55 | } | ... | ... |
Vrh.Log4Pro.MaintenanceConsole/Program.cs
... | ... | @@ -9,6 +9,7 @@ using System.Management; |
9 | 9 | using System.Diagnostics; |
10 | 10 | |
11 | 11 | using Vrh.XmlProcessing; |
12 | +using VRH.Common; | |
12 | 13 | using System.Xml.Linq; |
13 | 14 | |
14 | 15 | namespace Vrh.Log4Pro.MaintenanceConsole |
... | ... | @@ -17,11 +18,21 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
17 | 18 | { |
18 | 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 | 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 | 36 | return; |
26 | 37 | } |
27 | 38 | |
... | ... | @@ -29,12 +40,24 @@ namespace Vrh.Log4Pro.MaintenanceConsole |
29 | 40 | .AddMenuItem(new Menu.Item("WAM", "Web Application Manager", WebApplicationManager.Execute)) |
30 | 41 | .AddMenuItem(new Menu.Item("WSM", "Windows Service Manager", WindowsServiceManager.Execute)) |
31 | 42 | .AddMenuItem(new Menu.Item("FCL", "File Cleaner Manager", FileCleanerManager.Execute)) |
43 | + .AddMenuItem(new Menu.Item("SCH", "Scheduled Task Manager", ScheduledTaskmanagerManager.Execute)) | |
32 | 44 | .AddMenuItem(new Menu.ItemSeparator('-')) |
33 | 45 | .AddMenuItem(new Menu.Item("TOL", "Maintenance tools", MaintenanceToolManager.Execute)) |
34 | 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 | 1 | <?xml version="1.0" encoding="utf-8"?> |
2 | 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 | 4 | <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
5 | 5 | <PropertyGroup> |
6 | 6 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
... | ... | @@ -37,10 +37,10 @@ |
37 | 37 | </PropertyGroup> |
38 | 38 | <ItemGroup> |
39 | 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 | 41 | </Reference> |
42 | 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 | 44 | </Reference> |
45 | 45 | <Reference Include="Microsoft.Web.Administration, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> |
46 | 46 | <HintPath>..\packages\Microsoft.Web.Administration.11.1.0\lib\netstandard1.5\Microsoft.Web.Administration.dll</HintPath> |
... | ... | @@ -145,8 +145,8 @@ |
145 | 145 | <Reference Include="Microsoft.CSharp" /> |
146 | 146 | <Reference Include="System.Data" /> |
147 | 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 | 150 | </Reference> |
151 | 151 | <Reference Include="Vrh.XmlProcessing, Version=1.23.0.0, Culture=neutral, processorArchitecture=MSIL"> |
152 | 152 | <HintPath>..\packages\Vrh.XmlProcessing.1.23.0\lib\net45\Vrh.XmlProcessing.dll</HintPath> |
... | ... | @@ -156,6 +156,8 @@ |
156 | 156 | <Compile Include="ConsoleFunction - CommandLineParser.cs" /> |
157 | 157 | <Compile Include="ConsoleFunction - ColorConsole.cs" /> |
158 | 158 | <Compile Include="ConsoleFunction - Menu.cs" /> |
159 | + <Compile Include="ConsoleFunction - Tools.cs" /> | |
160 | + <Compile Include="Manager - ScheduledTaskManager.cs" /> | |
159 | 161 | <Compile Include="Manager - WindowsServiceManager.cs" /> |
160 | 162 | <Compile Include="Manager - FileCleanerManager.cs" /> |
161 | 163 | <Compile Include="Manager - MaintenanceToolManager.cs" /> |
... | ... | @@ -179,13 +181,14 @@ |
179 | 181 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> |
180 | 182 | </Content> |
181 | 183 | </ItemGroup> |
184 | + <ItemGroup /> | |
182 | 185 | <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
183 | 186 | <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> |
184 | 187 | <PropertyGroup> |
185 | 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 | 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 | 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 | 194 | </Project> |
192 | 195 | \ No newline at end of file | ... | ... |
Vrh.Log4Pro.MaintenanceConsole/packages.config
1 | 1 | <?xml version="1.0" encoding="utf-8"?> |
2 | 2 | <packages> |
3 | - <package id="EntityFramework" version="6.4.0" targetFramework="net462" /> | |
3 | + <package id="EntityFramework" version="6.4.4" targetFramework="net462" /> | |
4 | 4 | <package id="Microsoft.NETCore.Platforms" version="1.0.1" targetFramework="net462" /> |
5 | 5 | <package id="Microsoft.Web.Administration" version="11.1.0" targetFramework="net462" /> |
6 | 6 | <package id="Microsoft.Win32.Primitives" version="4.0.1" targetFramework="net462" /> |
... | ... | @@ -55,6 +55,6 @@ |
55 | 55 | <package id="System.Threading.Timer" version="4.0.1" targetFramework="net462" /> |
56 | 56 | <package id="System.Xml.ReaderWriter" version="4.0.11" targetFramework="net462" /> |
57 | 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 | 59 | <package id="Vrh.XmlProcessing" version="1.23.0" targetFramework="net462" /> |
60 | 60 | </packages> |
61 | 61 | \ No newline at end of file | ... | ... |