Improve CLI behaviors with empty arguments

pull/374/head
NextTurn 2019-10-29 00:00:00 +08:00
parent 48d4722b58
commit e8e1ee2300
No known key found for this signature in database
GPG Key ID: 17A0D50ADDE1A0C4
1 changed files with 252 additions and 248 deletions

View File

@ -479,24 +479,35 @@ namespace winsw
/// <summary> /// <summary>
/// Runs the wrapper. /// Runs the wrapper.
/// </summary> /// </summary>
/// <param name="_args">Arguments. If empty, WinSW will behave in the service mode. Otherwise - CLI mode</param> /// <param name="_args">Arguments.</param>
/// <param name="descriptor">Service descriptor. If null, it will be initialized within the method. /// <param name="descriptor">Service descriptor. If null, it will be initialized within the method.
/// In such case configs will be loaded from the XML Configuration File.</param> /// In such case configs will be loaded from the XML Configuration File.</param>
/// <exception cref="Exception">Any unhandled exception</exception> /// <exception cref="Exception">Any unhandled exception</exception>
public static void Run(string[] _args, ServiceDescriptor? descriptor = null) public static void Run(string[] _args, ServiceDescriptor? descriptor = null)
{ {
bool isCLIMode = _args.Length > 0; bool inCliMode = Console.OpenStandardInput() != Stream.Null;
// If descriptor is not specified, initialize the new one (and load configs from there) // If descriptor is not specified, initialize the new one (and load configs from there)
descriptor ??= new ServiceDescriptor(); descriptor ??= new ServiceDescriptor();
// Configure the wrapper-internal logging. // Configure the wrapper-internal logging.
// STDIN and STDOUT of the child process will be handled independently. // STDIN and STDOUT of the child process will be handled independently.
InitLoggers(descriptor, isCLIMode); InitLoggers(descriptor, inCliMode);
if (isCLIMode) // CLI mode, in-service mode otherwise if (!inCliMode)
{ {
Log.Debug("Starting ServiceWrapper in the CLI mode"); Log.Info("Starting WinSW in the service mode");
Run(new WrapperService(descriptor));
return;
}
Log.Debug("Starting WinSW in the CLI mode");
if (_args.Length == 0)
{
printHelp();
return;
}
// Get service info for the future use // Get service info for the future use
Win32Services svc = new WmiRoot().GetCollection<Win32Services>(); Win32Services svc = new WmiRoot().GetCollection<Win32Services>();
@ -767,13 +778,6 @@ namespace winsw
printAvailableCommandsInfo(); printAvailableCommandsInfo();
throw new Exception("Unknown command: " + args[0]); throw new Exception("Unknown command: " + args[0]);
} }
else
{
Log.Info("Starting ServiceWrapper in the service mode");
}
Run(new WrapperService(descriptor));
}
private static void InitLoggers(ServiceDescriptor d, bool enableCLILogging) private static void InitLoggers(ServiceDescriptor d, bool enableCLILogging)
{ {