private bool TryToProceedCommand(ICommand command, IEnumerable<string> args) { if (command != null) { AbstractTraceConsole traceConsole = null; try { command.InjectProperties(args); traceConsole = new TraceConsole(Console, command); if (!command.AllowParallel && !_lockingService.AcquireLock(command.Name)) return false; command.Console = traceConsole; command.Run(); return true; } catch (Exception exception) { LogException(traceConsole, exception, command); return false; } finally { if (!command.AllowParallel) _lockingService.ReleaseLock(command.Name); var disposable = traceConsole as IDisposable; if (disposable != null) disposable.Dispose(); } } return false; }