Q:

MSTest hangs for seemingly no reason

<TLDR>
Running an MSTest test from the command line hangs without any errors or timeouts whilst "waiting for runs/agents". The reason might be that "there are no runs in the queue", but why this is so I have no idea, because the exact same test runs just fine on another machine.
</TLDR>

We've recently moved from evaluating TeamCity on a test machine, to installing it in our production environment. After migrating all of our build configurations we suddenly got problems with our MSTest tests: none would run.
After debugging our way through everything we can think of, we think we have ruled out anything to do with TeamCity. We're left believing this is something directly with MSTest. As a simple way to reproduce our issue, I've created a test solution MSTestTest(C# 4.0) in Visual Studio.
It has one project MSTestTest with a single class Class1:
namespace MSTestTest
{
    public static class Class1
    {
        public static string Foo()
        {
            return "Bar";
        }
    }
}

It has another project MSTestTestTest with a single MSTest test class UnitTest1:
using MSTestTest;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace MSTestTestTest
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            Assert.AreEqual("Bar", Class1.Foo());
        }
    }
}

The solution is compiled and I copy its two DLLs (MSTestTest.dll and MSTestTestTest.dll) to our old test server and our new production server. On both servers I've edited the MSTest.exe.config file to write verbose logging information to C:\Temp\MSTestTrace.log (as described here).
On both the test server and the production server I then run the tests from the command line like so:
mstest /testcontainer:MSTestTestTest.dll /resultsfile:results.trx

On the test server I get a successful test result straight away:
C:\temp\MSTestTestTest>mstest /testcontainer:MSTestTestTest.dll /resultsfile:results.trx
Microsoft (R) Test Execution Command Line Tool Version 10.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.

Loading MSTestTestTest.dll...
Starting execution...

Results               Top Level Tests
-------               ---------------
Passed                MSTestTestTest.UnitTest1.TestMethod1
1/1 test(s) Passed

Summary
-------
Test Run Completed.
  Passed  1
  ---------
  Total   1
Results file:  C:\temp\MSTestTestTest\results.trx
Test Settings: Default Test Settings

On the production server however, all I get is this:
C:\Temp\MSTestTestTest>mstest /testcontainer:MSTestTestTest.dll /resultsfile:results.trx
Microsoft (R) Test Execution Command Line Tool Version 10.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.

Loading MSTestTestTest.dll...
Starting execution...

I've left the server running for hours, but nothing happens. No timeout, no errors, no nothing. At this point I'm completely stuck as to where to continue.
Here is a excerpt from the trace log on the test server (full log can be seen here (from a different, but identical run)):
15:02:39.525, TestAgentProcessReady: total # of execution agents=1.
15:02:39.525, ControllerExecution.TestAgentProcessReady: areAllAgentProcessesReady=True.
15:02:39.525, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Controller.ReceivedTestMessageWrapper>(ControllerExecution.TestMessageReceiver)+ExternalJob.ProcessJob: successfully invoked job processor for job 'ReceivedTestMessageWrapper for test message 'Microsoft.VisualStudio.TestTools.Execution.TestAgentProcessStartedMessage' from agent 'TRUTVBYGG01''
15:02:39.634, ControllerObject: RunQueueThread waiting for runs/agents...
15:02:39.744, AgentProcessManager.StartTestAgentRun_DoWork: tests were queued to test agents.
15:02:39.744, ControllerExecution.SyncAllExecutionAgentsReady: finished waiting on m_agentProcessesInitialized: signaledIndex=0
15:02:39.744, StateMachine(RunState): SetNextState Started called
15:02:39.744, StateMachine(RunState): In state Started. Waiting for state change...
15:02:39.744, StateMachine(RunState): Exit wait for state change, current state is Started.
15:02:39.744, StateMachine(RunState): calling state handler for Started
15:02:39.744, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: invoking special job checker for job 'TRUTVBYGG01: Run {9363144a-38a7-4ee1-a920-1e1a3584859b}: Started'
15:02:39.744, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: successfully invoked special job checker for job 'TRUTVBYGG01: Run {9363144a-38a7-4ee1-a920-1e1a3584859b}: Started'
15:02:39.744, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: isSpecial = False
15:02:39.744, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: Queuing job 'Type Microsoft.VisualStudio.TestTools.Common.RunStateEvent: TRUTVBYGG01: Run {9363144a-38a7-4ee1-a920-1e1a3584859b}: Started'
15:02:39.744, ControllerObject: RunStartedHandler called for run 9363144a-38a7-4ee1-a920-1e1a3584859b
15:02:39.744, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry>(ControllerObject.RunQueueMessageProcessor).TryEnqueueJob: Queuing job 'Type Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry: Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry'
15:02:39.744, StateMachine(RunState): SetNextState Running called
15:02:39.744, StateMachine(RunState): In state Running. Waiting for state change...
15:02:39.744, StateMachine(RunState): Exit wait for state change, current state is Running.
15:02:39.744, StateMachine(RunState): calling state handler for Running
15:02:39.744, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: invoking special job checker for job 'TRUTVBYGG01: Run {9363144a-38a7-4ee1-a920-1e1a3584859b}: Running'
15:02:39.744, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: successfully invoked special job checker for job 'TRUTVBYGG01: Run {9363144a-38a7-4ee1-a920-1e1a3584859b}: Running'
15:02:39.744, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: isSpecial = False
15:02:39.744, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: Queuing job 'Type Microsoft.VisualStudio.TestTools.Common.RunStateEvent: TRUTVBYGG01: Run {9363144a-38a7-4ee1-a920-1e1a3584859b}: Running'
15:02:39.744, StateMachine(RunState): In state Running. Waiting for state change...
15:02:39.744, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender)+ExternalJob.ProcessJob: invoking job processor for job 'TRUTVBYGG01: Run {9363144a-38a7-4ee1-a920-1e1a3584859b}: Started'
15:02:39.744, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver).TryEnqueueJob: invoking special job checker for job 'Microsoft.VisualStudio.TestTools.Common.TestMessageBulk'
15:02:39.744, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver).TryEnqueueJob: successfully invoked special job checker for job 'Microsoft.VisualStudio.TestTools.Common.TestMessageBulk'
15:02:39.744, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver).TryEnqueueJob: isSpecial = False
15:02:39.744, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver).TryEnqueueJob: Queuing job 'Type Microsoft.VisualStudio.TestTools.Common.TestMessageBulk: Microsoft.VisualStudio.TestTools.Common.TestMessageBulk'
15:02:39.744, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender)+ExternalJob.ProcessJob: successfully invoked job processor for job 'TRUTVBYGG01: Run {9363144a-38a7-4ee1-a920-1e1a3584859b}: Started'
15:02:39.744, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry>(ControllerObject.RunQueueMessageProcessor)+ExternalJob.ProcessJob: invoking job processor for job 'Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry'
15:02:39.744, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry>(ControllerObject.RunQueueMessageProcessor)+ExternalJob.ProcessJob: successfully invoked job processor for job 'Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry'
15:02:39.744, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver)+ExternalJob.ProcessJob: invoking job processor for job 'Microsoft.VisualStudio.TestTools.Common.TestMessageBulk'
15:02:39.744, LocalRunMessageListener.OnProcessReceivedTestMessage: Handling message 'TRUTVBYGG01: Run {9363144a-38a7-4ee1-a920-1e1a3584859b}: Started'
15:02:39.744, LocalRunMessageListener: RestartTimer
15:02:39.744, LocalRunMessageListener.OnProcessReceivedTestMessage: Handling message 'TRUTVBYGG01: Run {9363144a-38a7-4ee1-a920-1e1a3584859b}: Running'
15:02:39.744, LocalRunMessageListener: RestartTimer
15:02:39.744, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver)+ExternalJob.ProcessJob: successfully invoked job processor for job 'Microsoft.VisualStudio.TestTools.Common.TestMessageBulk'
15:02:39.900, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Controller.ReceivedTestMessageWrapper>(ControllerExecution.TestMessageReceiver).TryEnqueueJob: invoking special job checker for job 'ReceivedTestMessageWrapper for test message 'Run {9363144a-38a7-4ee1-a920-1e1a3584859b}, Test {854d1b23-760d-4e32-a6c7-91b74b5f2409}: Started' from agent 'TRUTVBYGG01''
15:02:39.900, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Controller.ReceivedTestMessageWrapper>(ControllerExecution.TestMessageReceiver).TryEnqueueJob: successfully invoked special job checker for job 'ReceivedTestMessageWrapper for test message 'Run {9363144a-38a7-4ee1-a920-1e1a3584859b}, Test {854d1b23-760d-4e32-a6c7-91b74b5f2409}: Started' from agent 'TRUTVBYGG01''
15:02:39.900, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Controller.ReceivedTestMessageWrapper>(ControllerExecution.TestMessageReceiver).TryEnqueueJob: isSpecial = False
15:02:39.900, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Controller.ReceivedTestMessageWrapper>(ControllerExecution.TestMessageReceiver).TryEnqueueJob: Queuing job 'Type Microsoft.VisualStudio.TestTools.Controller.ReceivedTestMessageWrapper: ReceivedTestMessageWrapper for test message 'Run {9363144a-38a7-4ee1-a920-1e1a3584859b}, Test {854d1b23-760d-4e32-a6c7-91b74b5f2409}: Started' from agent 'TRUTVBYGG01''
15:02:39.900, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Controller.ReceivedTestMessageWrapper>(ControllerExecution.TestMessageReceiver)+ExternalJob.ProcessJob: invoking job processor for job 'ReceivedTestMessageWrapper for test message 'Run {9363144a-38a7-4ee1-a920-1e1a3584859b}, Test {854d1b23-760d-4e32-a6c7-91b74b5f2409}: Started' from agent 'TRUTVBYGG01''
15:02:39.900, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: invoking special job checker for job 'Run {9363144a-38a7-4ee1-a920-1e1a3584859b}, Test {854d1b23-760d-4e32-a6c7-91b74b5f2409}: Started'
15:02:39.900, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: successfully invoked special job checker for job 'Run {9363144a-38a7-4ee1-a920-1e1a3584859b}, Test {854d1b23-760d-4e32-a6c7-91b74b5f2409}: Started'
15:02:39.900, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: isSpecial = False
15:02:39.900, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: Queuing job 'Type Microsoft.VisualStudio.TestTools.Common.TestStateEvent: Run {9363144a-38a7-4ee1-a920-1e1a3584859b}, Test {854d1b23-760d-4e32-a6c7-91b74b5f2409}: Started'
15:02:39.900, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Controller.ReceivedTestMessageWrapper>(ControllerExecution.TestMessageReceiver)+ExternalJob.ProcessJob: successfully invoked job processor for job 'ReceivedTestMessageWrapper for test message 'Run {9363144a-38a7-4ee1-a920-1e1a3584859b}, Test {854d1b23-760d-4e32-a6c7-91b74b5f2409}: Started' from agent 'TRUTVBYGG01''
15:02:39.900, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender)+ExternalJob.ProcessJob: invoking job processor for job 'Run {9363144a-38a7-4ee1-a920-1e1a3584859b}, Test {854d1b23-760d-4e32-a6c7-91b74b5f2409}: Started'
15:02:39.900, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver).TryEnqueueJob: invoking special job checker for job 'Run {9363144a-38a7-4ee1-a920-1e1a3584859b}, Test {854d1b23-760d-4e32-a6c7-91b74b5f2409}: Started'

And here is a similar excerpt from the production server (full log can be seen here (from a different, but identical run)), showing where things start to hang:
16:33:50.260, TestAgentProcessReady: total # of execution agents=1.
16:33:50.260, ControllerExecution.TestAgentProcessReady: areAllAgentProcessesReady=True.
16:33:50.260, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Controller.ReceivedTestMessageWrapper>(ControllerExecution.TestMessageReceiver)+ExternalJob.ProcessJob: successfully invoked job processor for job 'ReceivedTestMessageWrapper for test message 'Microsoft.VisualStudio.TestTools.Execution.TestAgentProcessStartedMessage' from agent 'TRAPPUTVTCP01''
16:33:50.292, AgentProcessManager.StartTestAgentRun_DoWork: tests were queued to test agents.
16:33:50.292, ControllerExecution.SyncAllExecutionAgentsReady: finished waiting on m_agentProcessesInitialized: signaledIndex=0
16:33:50.292, StateMachine(RunState): SetNextState Started called
16:33:50.292, StateMachine(RunState): In state Started. Waiting for state change...
16:33:50.292, StateMachine(RunState): Exit wait for state change, current state is Started.
16:33:50.292, StateMachine(RunState): calling state handler for Started
16:33:50.292, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: invoking special job checker for job 'TRAPPUTVTCP01: Run {453f4093-9409-40f3-9651-34caa1b8c92a}: Started'
16:33:50.292, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: successfully invoked special job checker for job 'TRAPPUTVTCP01: Run {453f4093-9409-40f3-9651-34caa1b8c92a}: Started'
16:33:50.292, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: isSpecial = False
16:33:50.292, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: Queuing job 'Type Microsoft.VisualStudio.TestTools.Common.RunStateEvent: TRAPPUTVTCP01: Run {453f4093-9409-40f3-9651-34caa1b8c92a}: Started'
16:33:50.292, ControllerObject: RunStartedHandler called for run 453f4093-9409-40f3-9651-34caa1b8c92a
16:33:50.292, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry>(ControllerObject.RunQueueMessageProcessor).TryEnqueueJob: Queuing job 'Type Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry: Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry'
16:33:50.292, StateMachine(RunState): SetNextState Running called
16:33:50.292, StateMachine(RunState): In state Running. Waiting for state change...
16:33:50.292, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry>(ControllerObject.RunQueueMessageProcessor)+ExternalJob.ProcessJob: invoking job processor for job 'Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry'
16:33:50.292, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry>(ControllerObject.RunQueueMessageProcessor)+ExternalJob.ProcessJob: successfully invoked job processor for job 'Microsoft.VisualStudio.TestTools.Execution.ControllerQueueEntry'
16:33:50.292, StateMachine(RunState): Exit wait for state change, current state is Running.
16:33:50.292, StateMachine(RunState): calling state handler for Running
16:33:50.292, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: invoking special job checker for job 'TRAPPUTVTCP01: Run {453f4093-9409-40f3-9651-34caa1b8c92a}: Running'
16:33:50.292, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: successfully invoked special job checker for job 'TRAPPUTVTCP01: Run {453f4093-9409-40f3-9651-34caa1b8c92a}: Running'
16:33:50.292, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: isSpecial = False
16:33:50.292, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender).TryEnqueueJob: Queuing job 'Type Microsoft.VisualStudio.TestTools.Common.RunStateEvent: TRAPPUTVTCP01: Run {453f4093-9409-40f3-9651-34caa1b8c92a}: Running'
16:33:50.292, StateMachine(RunState): In state Running. Waiting for state change...
16:33:50.292, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender)+ExternalJob.ProcessJob: invoking job processor for job 'TRAPPUTVTCP01: Run {453f4093-9409-40f3-9651-34caa1b8c92a}: Started'
16:33:50.292, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver).TryEnqueueJob: invoking special job checker for job 'Microsoft.VisualStudio.TestTools.Common.TestMessageBulk'
16:33:50.307, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver).TryEnqueueJob: successfully invoked special job checker for job 'Microsoft.VisualStudio.TestTools.Common.TestMessageBulk'
16:33:50.307, BackgroundSpecialJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver).TryEnqueueJob: isSpecial = False
16:33:50.307, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver).TryEnqueueJob: Queuing job 'Type Microsoft.VisualStudio.TestTools.Common.TestMessageBulk: Microsoft.VisualStudio.TestTools.Common.TestMessageBulk'
16:33:50.307, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(ControllerExecution.TestMessageSender)+ExternalJob.ProcessJob: successfully invoked job processor for job 'TRAPPUTVTCP01: Run {453f4093-9409-40f3-9651-34caa1b8c92a}: Started'
16:33:50.307, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver)+ExternalJob.ProcessJob: invoking job processor for job 'Microsoft.VisualStudio.TestTools.Common.TestMessageBulk'
16:33:50.307, LocalRunMessageListener.OnProcessReceivedTestMessage: Handling message 'TRAPPUTVTCP01: Run {453f4093-9409-40f3-9651-34caa1b8c92a}: Started'
16:33:50.307, LocalRunMessageListener: RestartTimer
16:33:50.307, LocalRunMessageListener.OnProcessReceivedTestMessage: Handling message 'TRAPPUTVTCP01: Run {453f4093-9409-40f3-9651-34caa1b8c92a}: Running'
16:33:50.307, LocalRunMessageListener: RestartTimer
16:33:50.307, BackgroundJobProcessor<Microsoft.VisualStudio.TestTools.Common.TestMessage>(LocalRunMessageListener.TestMessageReceiver)+ExternalJob.ProcessJob: successfully invoked job processor for job 'Microsoft.VisualStudio.TestTools.Common.TestMessageBulk'
16:33:50.401, ControllerObject: RunQueueThread there are no runs in the queue.
16:33:50.510, ControllerObject: RunQueueThread waiting for runs/agents...
16:34:10.291, LocalRunMessageListener: RestartTimer
16:34:10.291, ControllerExecution: Sent heartbeat to listeners
16:34:30.321, LocalRunMessageListener: RestartTimer
16:34:30.321, ControllerExecution: Sent heartbeat to listeners
16:34:50.352, LocalRunMessageListener: RestartTimer
16:34:50.352, ControllerExecution: Sent heartbeat to listeners
16:35:10.382, LocalRunMessageListener: RestartTimer
16:35:10.382, ControllerExecution: Sent heartbeat to listeners
16:35:30.412, LocalRunMessageListener: RestartTimer
16:35:30.412, ControllerExecution: Sent heartbeat to listeners
16:35:50.443, LocalRunMessageListener: RestartTimer

I've also tried running the command prompt from where I'm running MSTest as Administrator, but that didn't seem to make any difference.
Any suggestion regarding what my next step should be will be greatly welcome!

A:

The problem is because of a bug with MSTest when Visual Studio 2010 and Visual Studio 2012 is installed side by side. The solution is to install Service Pack 1 for Visual Studio 2010.
I came to realize this by looking in Windows Logs > Applications in the Event Viewer. There I found an Error from the Source VSTTAgentProcess (which hadn't been present in any of the MSTest trace logs I had been looking through):
(QTAgent32.exe, PID 6912, Thread 9) AgentObject.OnBackgroundSendTestMessage: Connection to controller was lost.
System.Runtime.Remoting.RemotingException:
The argument type 'Run {b816a0d9-50f3-490a-96b8-479555466167}, Test {8a2710b4-3cf9-441c-bd5c-0efb0601e059}: Started' cannot be converted into parameter type 'Microsoft.VisualStudio.TestTools.Common.TestMessage'.
---> System.InvalidCastException: Object must implement IConvertible.
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at System.Runtime.Remoting.Messaging.Message.CoerceArg(Object value, Type pt)
   --- End of inner exception stack trace ---

Googling for this exception then led me to this post explaining the VS 2010/2012 issue.
It is also worth mentioning that I had to install Microsoft Office Developer Tools before I was able to install VS2010 SP1.

