public bool Execute(ServiceConfiguration configuration)
        {
            Guard.AgainstNull(configuration, nameof(configuration));

            var result = false;

            try
            {
                var arguments = new Arguments(Environment.GetCommandLineArgs());
                var action    = arguments.CommandLine.Length > 1 ? arguments.CommandLine[1] : string.Empty;

                configuration.WithArguments(arguments);

                if (ShouldShowHelp(arguments))
                {
                    ShowHelp();

                    return(true);
                }

                if (arguments.Contains("debug"))
                {
                    Debugger.Launch();
                }

                var install   = arguments.Contains("install") || action.Equals("install", StringComparison.InvariantCultureIgnoreCase);
                var uninstall = arguments.Contains("uninstall") || action.Equals("uninstall", StringComparison.InvariantCultureIgnoreCase);

                if (install && uninstall)
                {
                    throw new InstallException("Cannot specify /install and /uninstall together.");
                }

                var start        = arguments.Contains("start") || action.Equals("start", StringComparison.InvariantCultureIgnoreCase);
                var stop         = arguments.Contains("stop") || action.Equals("stop", StringComparison.InvariantCultureIgnoreCase);
                var timeoutValue = arguments.Get("timeout", "30000");

                if (!int.TryParse(timeoutValue, out var timeout))
                {
                    timeout = 30000;
                }

                configuration.WithTimeout(timeout);

                if (uninstall)
                {
                    new WindowsServiceInstaller().Uninstall(configuration);

                    result = true;
                }

                if (install)
                {
                    new WindowsServiceInstaller().Install(configuration);

                    result = true;
                }

                if (stop || start)
                {
                    var controller = new ServiceHostController(configuration);

                    if (stop)
                    {
                        controller.Stop();
                    }

                    if (start)
                    {
                        controller.Start();
                    }

                    result = true;
                }
            }
            catch (Exception ex)
            {
                if (Environment.UserInteractive)
                {
                    ConsoleExtensions.WriteLine(ConsoleColor.Red, ex.AllMessages());

                    Console.WriteLine();
                    ConsoleExtensions.WriteLine(ConsoleColor.Gray, "Press any key to close...");
                    Console.ReadKey();
                }
                else
                {
                    Log.Fatal($"[UNHANDLED EXCEPTION] : exception = {ex.AllMessages()}");

                    throw;
                }

                result = true;
            }

            return(result);
        }