diff --git a/Main.cs b/Main.cs index 97b0760..5e07896 100644 --- a/Main.cs +++ b/Main.cs @@ -501,48 +501,27 @@ namespace winsw args[0] = args[0].ToLower(); if (args[0] == "install") { + string username=null, password=null; if (args.Count > 1 && args[1] == "/p") { // we expected username/password on stdin Console.Write("Username: "); - string username = Console.ReadLine (); + username = Console.ReadLine(); Console.Write("Password: "); - StringBuilder password = new StringBuilder (); - ConsoleKeyInfo key; - while (true) { - key = Console.ReadKey (true); - if (key.Key == ConsoleKey.Enter) { - break; - } else if(key.Key == ConsoleKey.Backspace) { - password.Remove (password.Length - 1, 1); - Console.Write ("\b \b"); - } else { - Console.Write ('*'); - password.Append (key.KeyChar); - } - } - - svc.Create ( - d.Id, - d.Caption, - "\"" + ServiceDescriptor.ExecutablePath + "\"", - WMI.ServiceType.OwnProcess, - ErrorControl.UserNotified, - StartMode.Automatic, - d.Interactive, - username, - password.ToString (), - d.ServiceDependencies); - } else { - svc.Create ( - d.Id, - d.Caption, - "\"" + ServiceDescriptor.ExecutablePath + "\"", - WMI.ServiceType.OwnProcess, - ErrorControl.UserNotified, - StartMode.Automatic, - d.Interactive, - d.ServiceDependencies); + password = ReadPassword(); } + + svc.Create ( + d.Id, + d.Caption, + "\"" + ServiceDescriptor.ExecutablePath + "\"", + WMI.ServiceType.OwnProcess, + ErrorControl.UserNotified, + StartMode.Automatic, + d.Interactive, + username, + password, + d.ServiceDependencies); + // update the description /* Somehow this doesn't work, even though it doesn't report an error Win32Service s = svc.Select(d.Id); @@ -627,5 +606,30 @@ namespace winsw } ServiceBase.Run(new WrapperService()); } + + private static string ReadPassword() + { + StringBuilder buf = new StringBuilder(); + ConsoleKeyInfo key; + while (true) + { + key = Console.ReadKey(true); + if (key.Key == ConsoleKey.Enter) + { + return buf.ToString(); + } + else if (key.Key == ConsoleKey.Backspace) + { + buf.Remove(buf.Length - 1, 1); + Console.Write("\b \b"); + } + else + { + Console.Write('*'); + buf.Append(key.KeyChar); + } + } + } + } } diff --git a/WmiSchema.cs b/WmiSchema.cs index 29d670b..8d8677d 100755 --- a/WmiSchema.cs +++ b/WmiSchema.cs @@ -48,8 +48,6 @@ namespace WMI public interface Win32Services : IWmiCollection { // ReturnValue Create(bool desktopInteract, string displayName, int errorControl, string loadOrderGroup, string loadOrderGroupDependencies, string name, string pathName, string serviceDependencies, string serviceType, string startMode, string startName, string startPassword); - void Create(string name, string displayName, string pathName, ServiceType serviceType, ErrorControl errorControl, StartMode startMode, bool desktopInteract, string[] serviceDependencies); - void Create(string name, string displayName, string pathName, ServiceType serviceType, ErrorControl errorControl, StartMode startMode, bool desktopInteract, string startName, string startPassword, string[] serviceDependencies); Win32Service Select(string name);