Exemple #1
0
        /// <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;
        }
Exemple #2
0
        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();
                }
            }
        }