diff --git a/Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs b/Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs index c59a36a..43d866f 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs @@ -504,51 +504,74 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS // sc.exe create NewService binpath= c:\windows\system32\NewServ.exe type= share start= auto depend= +TDI NetBIOS // // sc.exe [] create [] - // [type= {own | share | kernel | filesys | rec | interact type= {own | share}}] - // [start= {boot | system | auto | demand | disabled | delayed-auto}] - // [error= {normal | severe | critical | ignore}] - // [binpath= ] - // [group= ] - // [tag= {yes | no}] - // [depend= ] - // [obj= { | }] - // [displayname= ] - // [password= ] + // [type= {own | share | kernel | filesys | rec | interact type= {own | share}}] + // [start= {boot | system | auto | demand | disabled | delayed-auto}] + // [error= {normal | severe | critical | ignore}] + // [binpath= ] + // [group= ] + // [tag= {yes | no}] + // [depend= ] + // [obj= { | }] + // [displayname= ] + // [password= ] + // sc description TestService1 "This is the description of the service.." ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = false; startInfo.UseShellExecute = true; startInfo.FileName = "sc.exe"; startInfo.WindowStyle = ProcessWindowStyle.Hidden; - List argumentlist = new List(); - argumentlist.Add($"create"); argumentlist.Add(ws.Name.Quote()); - argumentlist.Add("displayname="); argumentlist.Add(ws.DisplayName.Quote()); + + try + { + startInfo.Arguments = BuildArgumentListCreate(ws, dependencygroupservicenamelist); + ColorConsole.WriteLine(startInfo.FileName + " " + startInfo.Arguments); + using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); } + + startInfo.Arguments = String.Join(" ", BuildArgumentListSetDescription(ws, dependencygroupservicenamelist)); + ColorConsole.WriteLine(startInfo.FileName + " " + startInfo.Arguments); + using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); } + } + catch (Exception ex) + { + ColorConsole.WriteLine(ex.Message); + if(ex.InnerException!=null) ColorConsole.WriteLine(ex.InnerException.Message); + } + return true; + } + private static string BuildArgumentListSetDescription(WindowsService ws, List dependencygroupservicenamelist) + { + var argumentlistsetdescription = new List(); + argumentlistsetdescription.Add($"description"); + argumentlistsetdescription.Add(ws.Name.Quote()); + argumentlistsetdescription.Add(ws.Xml_Description.Quote()); + return String.Join(" ", argumentlistsetdescription); + } + private static string BuildArgumentListCreate(WindowsService ws, List dependencygroupservicenamelist) + { + List argumentlistregister = new List(); + argumentlistregister.Add($"create"); argumentlistregister.Add(ws.Name.Quote()); + argumentlistregister.Add("displayname="); argumentlistregister.Add(ws.Xml_DisplayName.Quote()); if (ws.Xml_IdentityType == ServiceAccount.User) { - argumentlist.Add($"obj="); argumentlist.Add(ws.Xml_Username.Quote()); - argumentlist.Add("password="); argumentlist.Add(ws.Xml_Password.Quote()); + argumentlistregister.Add($"obj="); argumentlistregister.Add(ws.Xml_Username.Quote()); + argumentlistregister.Add("password="); argumentlistregister.Add(ws.Xml_Password.Quote()); } else { - argumentlist.Add($"obj="); argumentlist.Add(ws.Xml_IdentityType.ToString().Quote()); + argumentlistregister.Add($"obj="); argumentlistregister.Add(ws.Xml_IdentityType.ToString().Quote()); } // dependency csoport feldolgozása var effectivedependonlist = new List(); - foreach (var sn in ws.Xml_Dependon) { if (dependencygroupservicenamelist.Contains(sn)) { effectivedependonlist.Add(sn); } } - foreach (var sn in ws.Xml_Dependon) { if (dependencygroupservicenamelist==null || !dependencygroupservicenamelist.Any() || dependencygroupservicenamelist.Contains("*") || dependencygroupservicenamelist.Contains(sn)) { effectivedependonlist.Add(sn); } } + foreach (var sn in ws.Xml_Dependon) { if (dependencygroupservicenamelist == null || !dependencygroupservicenamelist.Any() || dependencygroupservicenamelist.Contains("*") || dependencygroupservicenamelist.Contains(sn)) { effectivedependonlist.Add(sn); } } //--------------------------------------- var dependonparameter = String.Join("/", effectivedependonlist); - argumentlist.Add($"depend="); argumentlist.Add(dependonparameter.Quote()); + argumentlistregister.Add($"depend="); argumentlistregister.Add(dependonparameter.Quote()); - var startparameter = - ws.Xml_StartMode == ServiceStartMode.Automatic ? "auto" - : ws.Xml_StartMode == ServiceStartMode.Manual ? "demand" - : ws.Xml_StartMode == ServiceStartMode.Disabled ? "disabled" - : ws.Xml_StartMode == ServiceStartMode.Boot ? "boot" - : "system"; - argumentlist.Add($"start="); argumentlist.Add(startparameter.Quote()); + var startparameter = WindowsService.ServiceStartModeToString(ws.Xml_StartMode); + argumentlistregister.Add($"start="); argumentlistregister.Add(startparameter.Quote()); var registerarguments = ""; switch (ws.Xml_RegistrationMode) @@ -572,20 +595,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS break; } var binpathparameter = Path.Combine(ws.Xml_InstallDir, ws.Xml_Exe).Quote() + " " + registerarguments; - argumentlist.Add($"binpath="); argumentlist.Add(binpathparameter.Quote()); - - startInfo.Arguments = String.Join(" ", argumentlist); - - ColorConsole.WriteLine(startInfo.FileName + " " + startInfo.Arguments); - try - { - using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); } - } - catch - { - // Log error. - } - return true; + argumentlistregister.Add($"binpath="); argumentlistregister.Add(binpathparameter.Quote()); + return String.Join(" ", argumentlistregister); } #endregion Register @@ -886,14 +897,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS this.ServicesDependOnThis = service.DependentServices.Select(s => s.ServiceName).ToList(); try { this.ThisDependsOn = service.ServicesDependedOn.Select(s => s.ServiceName).ToList(); } catch { this.ThisDependsOn = new List() { "???" }; } this.PathName = (string)wmiService[nameof(WindowsService.PathName)]; if (this.PathName == null) { this.PathName = ""; } - var sm = (string)wmiService[nameof(WindowsService.StartMode)]; - this.StartMode = - sm == "Auto" ? ServiceStartMode.Automatic - : sm == "Auto" ? ServiceStartMode.Manual - : sm == "Auto" ? ServiceStartMode.Disabled - : sm == "Auto" ? ServiceStartMode.Boot - : sm == "Auto" ? ServiceStartMode.System - : ServiceStartMode.Manual; + var sm = ((string)wmiService[nameof(WindowsService.StartMode)]).ToLower(); + this.StartMode = StringToServiceStartMode(sm); this.State = (string)wmiService[nameof(WindowsService.State)]; this.Status = (string)wmiService[nameof(WindowsService.Status)]; this.StartName = (string)wmiService[nameof(WindowsService.StartName)]; @@ -911,6 +916,27 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS } #endregion public CollectWindowsServiceInfo + public static string ServiceStartModeToString(ServiceStartMode sm) + { + return + sm == ServiceStartMode.Automatic ? "auto" + : sm == ServiceStartMode.Manual ? "demand" + : sm == ServiceStartMode.Disabled ? "disabled" + : sm == ServiceStartMode.Boot ? "boot" + : sm == ServiceStartMode.System ? "system" + : "system"; + } + public static ServiceStartMode StringToServiceStartMode(string sm) + { + return + sm == "auto" ? ServiceStartMode.Automatic + : sm == "disabled" ? ServiceStartMode.Disabled + : sm == "boot" ? ServiceStartMode.Boot + : sm == "system" ? ServiceStartMode.System + : sm == "demand" ? ServiceStartMode.Manual + : ServiceStartMode.Manual; + } + #endregion xml constructor #region cloner constructor public WindowsService(WindowsService ws) diff --git a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs index 5bcdd71..36ff39e 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.19.2.0")] -[assembly: AssemblyFileVersion("1.19.2.0")] +[assembly: AssemblyVersion("1.19.3.0")] +[assembly: AssemblyFileVersion("1.19.3.0")] -- libgit2 0.21.2