/// <summary> /// 装载新版本工程 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BTAddNew_Click(object sender, EventArgs e) { if (!string.IsNullOrWhiteSpace(Project.Folder) && !string.IsNullOrWhiteSpace(Project.JarFile)) { //查询New仓库中,该工程的新版本 string newPath = JarFileTool.GetNewPath(Project); if (Directory.Exists(newPath) && File.Exists(DirTool.Combine(newPath, Project.JarFile))) { try { ToastForm.Display("装载中", $"正在装载 {Project.Name} 的新版本...", 'i', 5000); //移动文件到发布仓库中 string aimPath = DirTool.Combine(R.Paths.PublishStorage, Project.Folder); //组合目标路径 DirTool.Create(aimPath); //创建目标路径 if (Directory.Exists(DirTool.Combine(aimPath, (Project.LastVersion + 1).ToString()))) //如果存在目标文件夹 { Directory.Delete(DirTool.Combine(aimPath, (Project.LastVersion + 1).ToString()), true); //删除目标文件夹(防止重复) } Directory.Move(newPath, DirTool.Combine(aimPath, (Project.LastVersion + 1).ToString())); //开始移动 //添加新版本信息 Project.LastVersion++; Project.CurrentVersion = Project.LastVersion; ProjectVersionModel version = new ProjectVersionModel() { CreateTime = DateTime.Now, Number = Project.LastVersion, }; if (Project.Versions == null) { Project.Versions = new List <ProjectVersionModel>(); } Project.Versions.Add(version); ToastForm.Display("装载成功", $"成功装载 {Project.Name} 的新版本", 'i', 5000); } catch { ToastForm.Display("装载失败", $"装载 {Project.Name} 的新版本失败", 'e', 5000); } } else { //没有发现新版本,不做处理 ToastForm.Display("装载失败", $"没有发现 {Project.Name} 的新版本", 'w', 5000); } } else { //没有工程配置信息,不做处理 ToastForm.Display("装载失败", $"没有发现工程的配置信息", 'e', 5000); } //清除多余版本 if (Project.VersionCache > 0 && !string.IsNullOrWhiteSpace(Project.Folder) && ListTool.HasElements(Project.Versions)) { if (Project.Versions.Count > Project.VersionCache) { List <ProjectVersionModel> _tempVers = Project.Versions.OrderByDescending(x => x.CreateTime).ToList(); List <ProjectVersionModel> _newVers = new List <ProjectVersionModel>(); for (int i = 0; i < Project.VersionCache; i++) { _newVers.Add(_tempVers[i]); } for (int i = Project.VersionCache; i < Project.Versions.Count; i++) { string path = DirTool.Combine(R.Paths.PublishStorage, Project.Folder, (_tempVers[i].Number).ToString()); try { //如果文件夹存在,则删除文件夹及内容 if (Directory.Exists(path)) { Directory.Delete(path, true); } } catch { //如果删除失败,则继续保留该版本,等待下次继续删除 _newVers.Add(_tempVers[i]); } } Project.Versions = _newVers; } } //重置项目信息 SetProject(Project); }
private void 浏览运行目录ToolStripMenuItem_Click(object sender, EventArgs e) { ExplorerAPI.ExplorerFile(JarFileTool.GetFilePath(Project)); ToastForm.Display("浏览", $"正在打开运行目录,请稍候...", 'i', 5000); }
/// <summary> /// 根据工程设置启动服务 /// </summary> /// <returns></returns> private void Start() { StatusUI(WorkStatus.正在启动); StartTime = DateTime.Now; //端口号是0,玩个蛋 if (Project.Port == 0) { ToastForm.Display("启动失败", $"没有为 {Project.Name} 工程配置正儿八经的端口号", 'e', 5000); StatusUI(WorkStatus.启动失败); return; } if (!(ListTool.HasElements(Project.Versions) && Project.CurrentVersion != 0 && Project.LastVersion != 0)) { //不存在版本或错误的版本(版本为0),不启动工程 ToastForm.Display("启动失败", $"没有发现 {Project.Name} 工程的相关文件", 'e', 5000); StatusUI(WorkStatus.启动失败); return; } //存在版本,准备启动 Task.Factory.StartNew(() => { string cmd = $"java -jar {Project.Parameter} \"{JarFileTool.GetFilePath(Project)}\""; CMDProcessTool.Execute(cmd, new Action <string>((s) => { if (ConsoleCodeTool.IsLunchSuccess(s)) { R.Log.i(s); StatusUI(WorkStatus.启动成功); Invoke(new Action(() => { ToastForm.Display("启动成功", $"启动 {Project.Name} 工程成功", 'i', 5000); })); } string log = ConsoleCodeTool.GetLogInfo(s); if (!string.IsNullOrWhiteSpace(log)) { R.Log.v(log); } //输出到窗口 if (ConsoleForm != null && !ConsoleForm.IsDisposed && ConsoleForm.Visible == true) { ConsoleForm.AddToQueue(s); } })); if (Status == WorkStatus.启动成功 || Status == WorkStatus.端口占用 || Status == WorkStatus.正在关闭) { StatusUI(WorkStatus.正在关闭); Stop(); } else { StatusUI(WorkStatus.启动失败); } }); }