Ejemplo n.º 1
0
        /// <summary>处理用户脚本</summary>
        static void ProcessUser()
        {
            while (true)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.Write("脚本:");
                Console.ForegroundColor = ConsoleColor.Gray;
                var line = Console.ReadLine();
                if (line.IsNullOrWhiteSpace())
                {
                    continue;
                }

                line = line.Trim();
                if (line == "?" || line.EqualIgnoreCase("help"))
                {
                    ShowDetail();
                }
                else if (line.EqualIgnoreCase("exit", "quit", "bye"))
                {
                    break;
                }
                else if (line.EqualIgnoreCase("-uninstall") || line.EqualIgnoreCase("-u"))
                {
                    RegHelper.Uninstall(false);
                    break;
                }
                else
                {
                    Console.Title = Title + " " + line;

                    try
                    {
                        // 判断是不是脚本
                        if (File.Exists(line))
                        {
                            Script.ProcessFile(line);
                        }
                        else
                        {
                            Script.ProcessCode(line);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        static void Main(String[] args)
        {
            var cfg = Config;

            // 分解参数
            try
            {
                cfg = Config = ScriptConfig.Parse(args);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.Read();
                return;
            }
            Script.Config = cfg;
            Host.Config   = cfg;

            // 隐藏当前窗口
            if (cfg.Hide)
            {
                var ip = Process.GetCurrentProcess().MainWindowHandle;
                if (ip != IntPtr.Zero)
                {
                    ShowWindow(ip, 0);
                }
            }

            // 修改标题
            Title         = AssemblyX.Create(Assembly.GetExecutingAssembly()).Title;
            Console.Title = Title;

            if (cfg.Debug)
            {
                XTrace.Debug = true;
            }
            XTrace.UseConsole();

            _CodeFile = true;
            if (args == null || args.Length == 0 || args[0] == "?" || args[0] == "/?")
            {
                _CodeFile = false;
            }

            // 是否卸载流程
            if (args != null && "-uninstall".EqualIgnoreCase(args))
            {
                RegHelper.Uninstall(true);
                return;
            }

            // 是否安装流程
            var install = args != null && "-install".EqualIgnoreCase(args);

#if !DEBUG
            // 检查并写入注册表
            if (RegHelper.CheckVersion(install))
            {
                // 发送到菜单
                Task.Run(() => RegHelper.SetSendTo());
                if (IsAdministrator())
                {
                    Task.Run(() => RegHelper.SetFileType());
                }
                Task.Run(() => RegHelper.SetPath());

                if (install)
                {
                    Thread.Sleep(3000);
                }
            }
            if (install)
            {
                return;
            }
#endif

            Task.Run(() => AutoUpdate());

            //if (cfg.Debug) Task.Run(() => Build.Builder.All);

            if (!_CodeFile)
            {
                // 输出版权信息
                ShowCopyright();

                // 显示帮助菜单
                ShowHelp();

                ProcessUser();
            }
            else
            {
                if (!cfg.NoLogo)
                {
                    ShowCopyright();
                }

                ProcessFile();
            }
        }
Ejemplo n.º 3
0
        /// <summary>处理脚本文件</summary>
        static void ProcessFile()
        {
            var cfg = Config;

            // 加上源文件路径
            Console.Title = Title + " " + cfg.File;

            ScriptEngine se = null;

            while (true)
            {
                try
                {
                    if (se == null)
                    {
                        var file = cfg.File;
                        if (!File.Exists(file))
                        {
                            throw new FileNotFoundException(String.Format("文件{0}不存在!", file), file);
                        }

                        //if (Config.Debug) Console.WriteLine("脚本:{0}", file);

                        // 增加源文件路径,便于调试纠错
                        if (!Path.IsPathRooted(file))
                        {
                            file = Path.Combine(Environment.CurrentDirectory, file);
                        }
                        file = file.GetFullPath();

                        se = Script.ProcessFile(file);
                        if (se == null)
                        {
                            return;
                        }
                    }
                    else
                    {
                        // 多次执行
                        Script.Run(se);
                    }
                }
                catch (Exception ex)
                {
                    // 获取内部异常
                    if (ex is TargetInvocationException)
                    {
                        ex = (ex as TargetInvocationException).InnerException;
                    }

                    XTrace.WriteException(ex);
                    //if (!Config.Debug) Console.WriteLine(ex.ToString());
                }
                finally
                {
                    // 处理文件已完成,自动更新任务下载完成后可马上执行更新
                    _CodeFile = false;
                }

                // 此时执行自动更新
                var up = _upgrade;
                if (up != null)
                {
                    _upgrade = null;
                    up.Update();
                }

                // 暂停,等待客户查看输出
                if (cfg.NoStop)
                {
                    return;
                }

                //Console.WriteLine("任意键退出……");
                var key = Console.ReadKey(true);
                // 如果按下m键,重新打开菜单
                if (key.KeyChar == 'm')
                {
                    //Main(new String[0]);
                    // 输出版权信息
                    ShowCopyright();

                    // 显示帮助菜单
                    ShowHelp();

                    ProcessUser();

                    // 处理用户输入本来就是一个循环,里面退出以后,这里也应该跟着退出
                    return;
                }

                // 再次执行
                if (key.KeyChar == 'c')
                {
                    continue;
                }

                // 是否卸载流程
                if (key.KeyChar == 'u')
                {
                    RegHelper.Uninstall(false);
                    return;
                }

                break;
            }
        }