Hi Mark -
NCrunch itself isn't really designed as a periodic test runner - it's intended to run tests constantly rather than on a timer, which would complicate using it for this scenario. There would be nothing to stop you adding the periodic logic inside a test - though you might need to do some interesting things to allow the results to be reported consistently. For example, you could have a test that checks the current time whenever it is run, and has its own log or data file that it checks this against. If it's been more than 12 hours since the VM logic inside the test was last run, the test will execute it again .. otherwise, it will pull the results of the previous run from the log file and report this instead. NCrunch may run the test 1000 times over the space of a day, but the logic gate inside the test would prevent it executing its logic more than twice over a 24 hour period.
As for the VM, there are a number of ways you could do this. You could set up a VM as a grid node server with NCrunch, and use the RequiredCapabilityAttribute (
http://www.ncrunch.net/documentation/reference_runtime-framework_requires-capability-attribute) to specify that the test can only be run on this grid node server.
Alternatively, if you are doing cross-platform testing, you could develop your own infrastructure for launching a clean VM as part of the test run, then setting up some kind of RPC connection into the VM in order to execute the code remotely, reporting the results back to the test runner outside the VM. This would take some invesetment, but it could work very well for some scenarios.