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 | 504 | // sc.exe create NewService binpath= c:\windows\system32\NewServ.exe type= share start= auto depend= +TDI NetBIOS |
| 505 | 505 | // |
| 506 | 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 | 519 | ProcessStartInfo startInfo = new ProcessStartInfo(); |
| 519 | 520 | startInfo.CreateNoWindow = false; |
| 520 | 521 | startInfo.UseShellExecute = true; |
| 521 | 522 | startInfo.FileName = "sc.exe"; |
| 522 | 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 | 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 | 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 | 565 | // dependency csoport feldolgozása |
| 537 | 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 | 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 | 576 | var registerarguments = ""; |
| 554 | 577 | switch (ws.Xml_RegistrationMode) |
| ... | ... | @@ -572,20 +595,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS |
| 572 | 595 | break; |
| 573 | 596 | } |
| 574 | 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 | 601 | #endregion Register |
| 591 | 602 | |
| ... | ... | @@ -886,14 +897,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS |
| 886 | 897 | this.ServicesDependOnThis = service.DependentServices.Select(s => s.ServiceName).ToList(); |
| 887 | 898 | try { this.ThisDependsOn = service.ServicesDependedOn.Select(s => s.ServiceName).ToList(); } catch { this.ThisDependsOn = new List<string>() { "???" }; } |
| 888 | 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 | 902 | this.State = (string)wmiService[nameof(WindowsService.State)]; |
| 898 | 903 | this.Status = (string)wmiService[nameof(WindowsService.Status)]; |
| 899 | 904 | this.StartName = (string)wmiService[nameof(WindowsService.StartName)]; |
| ... | ... | @@ -911,6 +916,27 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS |
| 911 | 916 | } |
| 912 | 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 | 940 | #endregion xml constructor |
| 915 | 941 | #region cloner constructor |
| 916 | 942 | public WindowsService(WindowsService ws) | ... | ... |
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
| ... | ... | @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; |
| 32 | 32 | // You can specify all the values or you can default the Build and Revision Numbers |
| 33 | 33 | // by using the '*' as shown below: |
| 34 | 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")] | ... | ... |