/// <summary> /// Runs a given script. /// </summary> /// <param name="scriptHost">The object that controls the script system.</param> /// <param name="info">The information describing the running script.</param> private static void OnRunScript(IHostScripts scriptHost, ScriptRunInformation info) { // If there is no facade then we're in design mode or something // else weird. if ((scriptHost == null) || (info == null)) { return; } var result = scriptHost.Execute(info.Language, info.Script, info.ScriptOutput as TextWriter); info.ScriptRunningTask = result.Item1; info.CancellationToken = result.Item2; }
private static int RunApplication(string[] arguments) { try { ShowHeader(); LoadKernel(); LogStartup(); var options = CreateOptionSet(); try { options.Parse(arguments); } catch (OptionException e) { s_Diagnostics.Log( LevelToLog.Fatal, ConsoleConstants.LogPrefix, string.Format( CultureInfo.InvariantCulture, Resources.Log_Error_InvalidInputParameters_WithException, e)); WriteErrorToConsole(Resources.Output_Error_InvalidInput); return(InvalidCommandLineParametersExitCode); } if (string.IsNullOrWhiteSpace(s_ScriptFile) || s_ShouldDisplayHelp) { ShowHelp(options); return(HelpShownExitCode); } if (!File.Exists(s_ScriptFile)) { s_Diagnostics.Log( LevelToLog.Fatal, ConsoleConstants.LogPrefix, string.Format( CultureInfo.InvariantCulture, Resources.Log_Error_ScripFileDoesNotExist, s_ScriptFile)); WriteErrorToConsole(Resources.Output_Error_ScriptFileDoesNotExist); return(InvalidScriptFileExitCode); } WriteInputParametersToLog(s_ScriptFile); System.Console.WriteLine(Resources.Output_Information_LoadingScriptFile); string text; using (var reader = new StreamReader(s_ScriptFile)) { text = reader.ReadToEnd(); } System.Console.WriteLine(Resources.Output_Information_ExecutingScript); var executionPair = s_ScriptHost.Execute(SelectScriptLanguageFromFileExtension(s_ScriptFile), text, System.Console.Out); try { CancellationTokenSource cancellationSource = executionPair.Item2; System.Console.CancelKeyPress += (s, e) => { var source = cancellationSource; if (source != null) { source.Cancel(); } }; executionPair.Item1.Wait(); return(NormalApplicationExitCode); } catch (AggregateException e) { s_Diagnostics.Log( LevelToLog.Fatal, ConsoleConstants.LogPrefix, string.Format( CultureInfo.InvariantCulture, Resources.Log_Error_ProcessingError_WithException, e)); WriteErrorToConsole(Resources.Output_Error_WhileProcessing); return(UnhandledExceptionApplicationExitCode); } } finally { if (s_ApplicationFacade != null) { s_ApplicationFacade.Shutdown(); } s_ShutdownEvent.WaitOne(); if (s_UiContainer != null) { s_UiContainer.Dispose(); } } }