protected void Execute(UnitTestSessionTestImpl session, List<IList<UnitTestTask>> sequences, Lifetime lt, TextWriter output, IUnitTestLaunch launch)
        {
            var msgListener = Solution.GetComponent<TestRemoteChannelMessageListener>();
            msgListener.Output = output;
            session.Sequences = sequences;
            msgListener.Run = session;
            msgListener.Strategy = new OutOfProcessUnitTestRunStrategy(GetRemoteTaskRunnerInfo());

            var runController = CreateTaskRunnerHostController(Solution.GetComponent<IUnitTestLaunchManager>(), Solution.GetComponent<IUnitTestResultManager>(), Solution.GetComponent<IUnitTestAgentManager>(), launch, Solution.GetComponent<IUnitTestSessionManager>(), GetServerPortNumber());
            msgListener.RunController = runController;
            var finished = new AutoResetEvent(false);
            session.OnFinish(() =>
            {
                var channel = GetRemoteChannel();
                if (channel != null)
                    channel.OnFinish(() => finished.Set());
                else
                    finished.Set();
            });
            session.Run(lt, runController, msgListener.Strategy);
            finished.WaitOne(30000);
        }