public void TestCSharpKilling()
		{
			using (ScriptRunner runner = new ScriptRunner(ScriptEngine.Language.CSharp, "class Program { static void Main() { System.Threading.Thread.Sleep(System.TimeSpan.FromHours(1)); } }"))
			{
				ManualResetEvent mre = new ManualResetEvent(false);
				runner.ProcessExited += delegate(object o, ProcessExitedEventArgs e) { mre.Set(); };

				runner.Start();
				Assert.IsTrue(runner.IsRunning);

				Assert.IsFalse(runner.WaitForExit(TimeSpan.Zero));
				runner.Kill();
	
				Assert.IsTrue(mre.WaitOne(0, false));
				Assert.IsFalse(runner.IsRunning);
				Assert.IsTrue(runner.WaitForExit(TimeSpan.Zero));
				Assert.AreNotEqual(0, runner.ExitCode);
			}
		}
		public void TestJScriptScript()
		{
			using (ScriptRunner runner = new ScriptRunner(ScriptEngine.Language.JScript, @"WScript.StdOut.WriteLine(WScript.Arguments(0));"))
			{
				StringWriter sw = new StringWriter();
				runner.OutputReceived += delegate(object o, ProcessOutputEventArgs e) { sw.WriteLine(e.Data); };
				runner.Start("From JScript");
				runner.WaitForExit();
				Assert.AreEqual(0, runner.ExitCode);
				Assert.AreEqual("From JScript", sw.ToString().Trim());
			}
		}
		public void TestPowerShellScript()
		{
			using (ScriptRunner runner = new ScriptRunner(ScriptEngine.Language.PowerShell, "ECHO From_PowerShell"))
			{
				StringWriter sw = new StringWriter();
				runner.OutputReceived += delegate(object o, ProcessOutputEventArgs e) { sw.WriteLine(e.Data); };
				runner.Start();
				runner.WaitForExit();
				Assert.AreEqual(0, runner.ExitCode);
				Assert.AreEqual("From_PowerShell", sw.ToString().Trim());
			}
		}