/// <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); } } } }
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(); } }
/// <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; } }