Commit ab4d66d6c193c7186f9378c170be6f9809abe3c2
1 parent
17723d0c
v1.19.3.0
- windows service display name és description korrekt definiálása a szerviz regisztrációjakor
Showing
2 changed files
with
76 additions
and
50 deletions
Show diff stats
Vrh.Log4Pro.MaintenanceConsole/Manager - WindowsServiceManager.cs
@@ -504,51 +504,74 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS | @@ -504,51 +504,74 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS | ||
504 | // sc.exe create NewService binpath= c:\windows\system32\NewServ.exe type= share start= auto depend= +TDI NetBIOS | 504 | // sc.exe create NewService binpath= c:\windows\system32\NewServ.exe type= share start= auto depend= +TDI NetBIOS |
505 | // | 505 | // |
506 | // sc.exe [<servername>] create [<servicename>] | 506 | // sc.exe [<servername>] create [<servicename>] |
507 | - // [type= {own | share | kernel | filesys | rec | interact type= {own | share}}] | ||
508 | - // [start= {boot | system | auto | demand | disabled | delayed-auto}] | ||
509 | - // [error= {normal | severe | critical | ignore}] | ||
510 | - // [binpath= <binarypathname>] | ||
511 | - // [group= <loadordergroup>] | ||
512 | - // [tag= {yes | no}] | ||
513 | - // [depend= <dependencies>] | ||
514 | - // [obj= {<accountname> | <objectname>}] | ||
515 | - // [displayname= <displayname>] | ||
516 | - // [password= <password>] | 507 | + // [type= {own | share | kernel | filesys | rec | interact type= {own | share}}] |
508 | + // [start= {boot | system | auto | demand | disabled | delayed-auto}] | ||
509 | + // [error= {normal | severe | critical | ignore}] | ||
510 | + // [binpath= <binarypathname>] | ||
511 | + // [group= <loadordergroup>] | ||
512 | + // [tag= {yes | no}] | ||
513 | + // [depend= <dependencies>] | ||
514 | + // [obj= {<accountname> | <objectname>}] | ||
515 | + // [displayname= <displayname>] | ||
516 | + // [password= <password>] | ||
517 | + // sc description TestService1 "This is the description of the service.." | ||
517 | 518 | ||
518 | ProcessStartInfo startInfo = new ProcessStartInfo(); | 519 | ProcessStartInfo startInfo = new ProcessStartInfo(); |
519 | startInfo.CreateNoWindow = false; | 520 | startInfo.CreateNoWindow = false; |
520 | startInfo.UseShellExecute = true; | 521 | startInfo.UseShellExecute = true; |
521 | startInfo.FileName = "sc.exe"; | 522 | startInfo.FileName = "sc.exe"; |
522 | startInfo.WindowStyle = ProcessWindowStyle.Hidden; | 523 | startInfo.WindowStyle = ProcessWindowStyle.Hidden; |
523 | - List<string> argumentlist = new List<string>(); | ||
524 | - argumentlist.Add($"create"); argumentlist.Add(ws.Name.Quote()); | ||
525 | - argumentlist.Add("displayname="); argumentlist.Add(ws.DisplayName.Quote()); | 524 | + |
525 | + try | ||
526 | + { | ||
527 | + startInfo.Arguments = BuildArgumentListCreate(ws, dependencygroupservicenamelist); | ||
528 | + ColorConsole.WriteLine(startInfo.FileName + " " + startInfo.Arguments); | ||
529 | + using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); } | ||
530 | + | ||
531 | + startInfo.Arguments = String.Join(" ", BuildArgumentListSetDescription(ws, dependencygroupservicenamelist)); | ||
532 | + ColorConsole.WriteLine(startInfo.FileName + " " + startInfo.Arguments); | ||
533 | + using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); } | ||
534 | + } | ||
535 | + catch (Exception ex) | ||
536 | + { | ||
537 | + ColorConsole.WriteLine(ex.Message); | ||
538 | + if(ex.InnerException!=null) ColorConsole.WriteLine(ex.InnerException.Message); | ||
539 | + } | ||
540 | + return true; | ||
541 | + } | ||
542 | + private static string BuildArgumentListSetDescription(WindowsService ws, List<string> dependencygroupservicenamelist) | ||
543 | + { | ||
544 | + var argumentlistsetdescription = new List<string>(); | ||
545 | + argumentlistsetdescription.Add($"description"); | ||
546 | + argumentlistsetdescription.Add(ws.Name.Quote()); | ||
547 | + argumentlistsetdescription.Add(ws.Xml_Description.Quote()); | ||
548 | + return String.Join(" ", argumentlistsetdescription); | ||
549 | + } | ||
550 | + private static string BuildArgumentListCreate(WindowsService ws, List<string> dependencygroupservicenamelist) | ||
551 | + { | ||
552 | + List<string> argumentlistregister = new List<string>(); | ||
553 | + argumentlistregister.Add($"create"); argumentlistregister.Add(ws.Name.Quote()); | ||
554 | + argumentlistregister.Add("displayname="); argumentlistregister.Add(ws.Xml_DisplayName.Quote()); | ||
526 | if (ws.Xml_IdentityType == ServiceAccount.User) | 555 | if (ws.Xml_IdentityType == ServiceAccount.User) |
527 | { | 556 | { |
528 | - argumentlist.Add($"obj="); argumentlist.Add(ws.Xml_Username.Quote()); | ||
529 | - argumentlist.Add("password="); argumentlist.Add(ws.Xml_Password.Quote()); | 557 | + argumentlistregister.Add($"obj="); argumentlistregister.Add(ws.Xml_Username.Quote()); |
558 | + argumentlistregister.Add("password="); argumentlistregister.Add(ws.Xml_Password.Quote()); | ||
530 | } | 559 | } |
531 | else | 560 | else |
532 | { | 561 | { |
533 | - argumentlist.Add($"obj="); argumentlist.Add(ws.Xml_IdentityType.ToString().Quote()); | 562 | + argumentlistregister.Add($"obj="); argumentlistregister.Add(ws.Xml_IdentityType.ToString().Quote()); |
534 | } | 563 | } |
535 | 564 | ||
536 | // dependency csoport feldolgozása | 565 | // dependency csoport feldolgozása |
537 | var effectivedependonlist = new List<string>(); | 566 | var effectivedependonlist = new List<string>(); |
538 | - foreach (var sn in ws.Xml_Dependon) { if (dependencygroupservicenamelist.Contains(sn)) { effectivedependonlist.Add(sn); } } | ||
539 | - foreach (var sn in ws.Xml_Dependon) { if (dependencygroupservicenamelist==null || !dependencygroupservicenamelist.Any() || dependencygroupservicenamelist.Contains("*") || dependencygroupservicenamelist.Contains(sn)) { effectivedependonlist.Add(sn); } } | 567 | + foreach (var sn in ws.Xml_Dependon) { if (dependencygroupservicenamelist == null || !dependencygroupservicenamelist.Any() || dependencygroupservicenamelist.Contains("*") || dependencygroupservicenamelist.Contains(sn)) { effectivedependonlist.Add(sn); } } |
540 | //--------------------------------------- | 568 | //--------------------------------------- |
541 | 569 | ||
542 | var dependonparameter = String.Join("/", effectivedependonlist); | 570 | var dependonparameter = String.Join("/", effectivedependonlist); |
543 | - argumentlist.Add($"depend="); argumentlist.Add(dependonparameter.Quote()); | 571 | + argumentlistregister.Add($"depend="); argumentlistregister.Add(dependonparameter.Quote()); |
544 | 572 | ||
545 | - var startparameter = | ||
546 | - ws.Xml_StartMode == ServiceStartMode.Automatic ? "auto" | ||
547 | - : ws.Xml_StartMode == ServiceStartMode.Manual ? "demand" | ||
548 | - : ws.Xml_StartMode == ServiceStartMode.Disabled ? "disabled" | ||
549 | - : ws.Xml_StartMode == ServiceStartMode.Boot ? "boot" | ||
550 | - : "system"; | ||
551 | - argumentlist.Add($"start="); argumentlist.Add(startparameter.Quote()); | 573 | + var startparameter = WindowsService.ServiceStartModeToString(ws.Xml_StartMode); |
574 | + argumentlistregister.Add($"start="); argumentlistregister.Add(startparameter.Quote()); | ||
552 | 575 | ||
553 | var registerarguments = ""; | 576 | var registerarguments = ""; |
554 | switch (ws.Xml_RegistrationMode) | 577 | switch (ws.Xml_RegistrationMode) |
@@ -572,20 +595,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS | @@ -572,20 +595,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS | ||
572 | break; | 595 | break; |
573 | } | 596 | } |
574 | var binpathparameter = Path.Combine(ws.Xml_InstallDir, ws.Xml_Exe).Quote() + " " + registerarguments; | 597 | var binpathparameter = Path.Combine(ws.Xml_InstallDir, ws.Xml_Exe).Quote() + " " + registerarguments; |
575 | - argumentlist.Add($"binpath="); argumentlist.Add(binpathparameter.Quote()); | ||
576 | - | ||
577 | - startInfo.Arguments = String.Join(" ", argumentlist); | ||
578 | - | ||
579 | - ColorConsole.WriteLine(startInfo.FileName + " " + startInfo.Arguments); | ||
580 | - try | ||
581 | - { | ||
582 | - using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); } | ||
583 | - } | ||
584 | - catch | ||
585 | - { | ||
586 | - // Log error. | ||
587 | - } | ||
588 | - return true; | 598 | + argumentlistregister.Add($"binpath="); argumentlistregister.Add(binpathparameter.Quote()); |
599 | + return String.Join(" ", argumentlistregister); | ||
589 | } | 600 | } |
590 | #endregion Register | 601 | #endregion Register |
591 | 602 | ||
@@ -886,14 +897,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS | @@ -886,14 +897,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS | ||
886 | this.ServicesDependOnThis = service.DependentServices.Select(s => s.ServiceName).ToList(); | 897 | this.ServicesDependOnThis = service.DependentServices.Select(s => s.ServiceName).ToList(); |
887 | try { this.ThisDependsOn = service.ServicesDependedOn.Select(s => s.ServiceName).ToList(); } catch { this.ThisDependsOn = new List<string>() { "???" }; } | 898 | try { this.ThisDependsOn = service.ServicesDependedOn.Select(s => s.ServiceName).ToList(); } catch { this.ThisDependsOn = new List<string>() { "???" }; } |
888 | this.PathName = (string)wmiService[nameof(WindowsService.PathName)]; if (this.PathName == null) { this.PathName = ""; } | 899 | this.PathName = (string)wmiService[nameof(WindowsService.PathName)]; if (this.PathName == null) { this.PathName = ""; } |
889 | - var sm = (string)wmiService[nameof(WindowsService.StartMode)]; | ||
890 | - this.StartMode = | ||
891 | - sm == "Auto" ? ServiceStartMode.Automatic | ||
892 | - : sm == "Auto" ? ServiceStartMode.Manual | ||
893 | - : sm == "Auto" ? ServiceStartMode.Disabled | ||
894 | - : sm == "Auto" ? ServiceStartMode.Boot | ||
895 | - : sm == "Auto" ? ServiceStartMode.System | ||
896 | - : ServiceStartMode.Manual; | 900 | + var sm = ((string)wmiService[nameof(WindowsService.StartMode)]).ToLower(); |
901 | + this.StartMode = StringToServiceStartMode(sm); | ||
897 | this.State = (string)wmiService[nameof(WindowsService.State)]; | 902 | this.State = (string)wmiService[nameof(WindowsService.State)]; |
898 | this.Status = (string)wmiService[nameof(WindowsService.Status)]; | 903 | this.Status = (string)wmiService[nameof(WindowsService.Status)]; |
899 | this.StartName = (string)wmiService[nameof(WindowsService.StartName)]; | 904 | this.StartName = (string)wmiService[nameof(WindowsService.StartName)]; |
@@ -911,6 +916,27 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS | @@ -911,6 +916,27 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS | ||
911 | } | 916 | } |
912 | #endregion public CollectWindowsServiceInfo | 917 | #endregion public CollectWindowsServiceInfo |
913 | 918 | ||
919 | + public static string ServiceStartModeToString(ServiceStartMode sm) | ||
920 | + { | ||
921 | + return | ||
922 | + sm == ServiceStartMode.Automatic ? "auto" | ||
923 | + : sm == ServiceStartMode.Manual ? "demand" | ||
924 | + : sm == ServiceStartMode.Disabled ? "disabled" | ||
925 | + : sm == ServiceStartMode.Boot ? "boot" | ||
926 | + : sm == ServiceStartMode.System ? "system" | ||
927 | + : "system"; | ||
928 | + } | ||
929 | + public static ServiceStartMode StringToServiceStartMode(string sm) | ||
930 | + { | ||
931 | + return | ||
932 | + sm == "auto" ? ServiceStartMode.Automatic | ||
933 | + : sm == "disabled" ? ServiceStartMode.Disabled | ||
934 | + : sm == "boot" ? ServiceStartMode.Boot | ||
935 | + : sm == "system" ? ServiceStartMode.System | ||
936 | + : sm == "demand" ? ServiceStartMode.Manual | ||
937 | + : ServiceStartMode.Manual; | ||
938 | + } | ||
939 | + | ||
914 | #endregion xml constructor | 940 | #endregion xml constructor |
915 | #region cloner constructor | 941 | #region cloner constructor |
916 | public WindowsService(WindowsService ws) | 942 | public WindowsService(WindowsService ws) |
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices; | @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; | ||
32 | // You can specify all the values or you can default the Build and Revision Numbers | 32 | // You can specify all the values or you can default the Build and Revision Numbers |
33 | // by using the '*' as shown below: | 33 | // by using the '*' as shown below: |
34 | // [assembly: AssemblyVersion("1.0.*")] | 34 | // [assembly: AssemblyVersion("1.0.*")] |
35 | -[assembly: AssemblyVersion("1.19.2.0")] | ||
36 | -[assembly: AssemblyFileVersion("1.19.2.0")] | 35 | +[assembly: AssemblyVersion("1.19.3.0")] |
36 | +[assembly: AssemblyFileVersion("1.19.3.0")] |