private void btn_ok_Click(object sender, EventArgs e) { if (!CheckFormData()) { return; } var job = GetJob(); AsyncUtil.Run(() => { if (_job == null ? _jobManagerProxy.AddJob(job) : _jobManagerProxy.UpdateJob(job)) { JobId = job.Id; DialogResult = DialogResult.OK; } else { DialogResult = DialogResult.Cancel; } }, exception: ex => { _logger.Error(ex, "添加或修改任务失败"); DialogResult = DialogResult.Cancel; }); }
private void delJob() { if (dgv_data.SelectedRows.Count <= 0) { return; } var selectedJob = SelectedJob; var result = MessageBox.Show(string.Format(Resources.Comfirm_DeleteJob__jobname, selectedJob.Name), Resources.MessageBox_Title_Information, MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result != DialogResult.Yes) { return; } AsyncUtil.Run(() => _jobManagerProxy.RemoveJob(selectedJob.Id), removeResult => { RefreshJobView(); }, exception => { _logger.Error(exception, "Delete Job Error"); RefreshJobView(); }); }
private void btn_stopSvc_Click(object sender, EventArgs e) { if (JobService == null) { MessageBox.Show(Resources.ServiceNotFound, Resources.MessageBox_Title_Information, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (JobService.Status == ServiceControllerStatus.Stopped) { MessageBox.Show(Resources.ServiceStoped, Resources.MessageBox_Title_Information, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (MessageBox.Show(Resources.Confirm_StopHost, Resources.MessageBox_Title_Warning, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) { return; } AsyncUtil.Run(() => { RefreshStatusMsgByServerStatus(ServerStatus.StopPending); RefreshServerControlBtn(ServerStatus.StopPending); DynamicUtil.InvokeCmd("HlcJobService stop"); }, RefreshServerStatus, exception => { _logger.Error(exception, "Stop Service Error"); }); }
private void btn_startSvc_Click(object sender, EventArgs e) { if (JobService == null) { MessageBox.Show(Resources.PleaseInstallService, Resources.MessageBox_Title_Information, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (JobService.Status == ServiceControllerStatus.Running) { MessageBox.Show(Resources.ServiceRunning, Resources.MessageBox_Title_Information, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } AsyncUtil.Run(() => { RefreshStatusMsgByServerStatus(ServerStatus.StartPending); RefreshServerControlBtn(ServerStatus.StartPending); DynamicUtil.InvokeCmd("HlcJobService start"); }, () => { RefreshServerStatus(); RefreshJobView(); }, exception => { _logger.Error(exception, "Start Service Error"); }); }
private void SwitchJobEnable(ManageJob job) { if (job == null) { return; } AsyncUtil.Run(() => job.Enable ? _jobManagerProxy.DisableJob(job.Id) : _jobManagerProxy.EnableJob(job.Id), result => { }, exception => { _logger.Error(exception, "Switch Job Status Error"); }); }
private void RefreshJobView(string selectedId = null) { lock (this) { AsyncUtil.Run(() => _jobManagerProxy.GetAllJobs(), jobs => { RefreshJobView(jobs, selectedId); }, exception => { _logger.Error(exception, "Refresh Job Error"); }); } }
private void ShowLog(ManageJob job) { if (InvokeRequired) { Invoke(new MethodInvoker(() => ShowLog(job))); return; } if (job == null) { txt_log.Text = ""; return; } var jobId = job.Id; if (!_logDict.ContainsKey(jobId)) { AsyncUtil.Run(() => { var chacheLog = _jobManagerProxy.GetChacheLog(jobId); _logDict[jobId] = new Queue <string>(); foreach (var log in chacheLog) { _logDict[jobId].Enqueue(log); } }, () => ShowLog(job), exception => { _logger.Error(exception, "Get Cache Log Error"); }); return; } var logs = _logDict[jobId]; if (logs == null) { txt_log.Text = ""; return; } StringBuilder sb = new StringBuilder(); foreach (var log in logs) { sb.AppendLine(log); } txt_log.Text = sb.ToString(); txt_log.Select(txt_log.Text.Length, 0); txt_log.ScrollToCaret(); }
/// <summary> /// 执行EXE服务 /// </summary> /// <param name="job"></param> private void InvokeExeServer(ManageJob job) { var args = string.Join(" ", job.Params); var jobIndex = Jobs.FindIndex(j => j.Id.Equals(job.Id)); if (jobIndex < 0) { return; } Jobs[jobIndex].State = JobState.Normal; UpdateClientJob(Jobs[jobIndex]); AsyncUtil.Run(() => { Thread.Sleep(500); Jobs[jobIndex].State = JobState.Normal; Jobs[jobIndex].PreviousFireTime = DateTimeOffset.Now; UpdateClientJob(Jobs[jobIndex]); NotifyClientLog(job.Id, "================= EXE Server Running =================="); _logger.Info($"Execute EXE Server Job:{job.Name}[{job.WorkPath} ({args})]"); ExecProcessAndWait(job.Id, job.WorkPath, args, Directory.GetParent(job.WorkPath).FullName); }, () => { Jobs[jobIndex].State = JobState.Complete; NotifyClientLog(job.Id, "================= EXE Server Finished =================="); UpdateClientJob(Jobs[jobIndex]); }, exception => { if (exception is AppDomainUnloadedException) { NotifyClientLog(job.Id, "================= EXE Server Uninstalled =================="); } else { _logger.Error(exception); NotifyClientLog(job.Id, "EXE Server Error。" + exception.Message); Jobs[jobIndex].State = JobState.Error; NotifyClientLog(job.Id, "================= EXE Server Error =================="); UpdateClientJob(Jobs[jobIndex]); } }); }
private void btn_installSvc_Click(object sender, EventArgs e) { if (JobService != null) { MessageBox.Show(Resources.ServiceExisted, Resources.MessageBox_Title_Information, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } AsyncUtil.Run(() => { RefreshStatusMsgByServerStatus(ServerStatus.Installing); RefreshServerControlBtn(ServerStatus.Installing); DynamicUtil.InvokeCmd("HlcJobService install"); }, RefreshServerStatus, exception => { _logger.Error(exception, "Install Service Error"); }); }
/// <summary> /// 执行CMD服务 /// </summary> /// <param name="job"></param> private void InvokeCmdServer(ManageJob job) { var jobIndex = Jobs.FindIndex(j => j.Id.Equals(job.Id)); if (jobIndex < 0) { return; } Jobs[jobIndex].State = JobState.Normal; UpdateClientJob(Jobs[jobIndex]); AsyncUtil.Run(() => { Thread.Sleep(500); Jobs[jobIndex].State = JobState.Normal; Jobs[jobIndex].PreviousFireTime = DateTimeOffset.Now; UpdateClientJob(Jobs[jobIndex]); NotifyClientLog(job.Id, "================= CMD Server Running =================="); _logger.Info($"Execute CMD Server Job:{job.Name}[{job.WorkPath}]"); var cmd = job.Command; var match = Regex.Match(cmd, "((?<exe>(\".+\")|(.+))? (?<args>.+))|(?<exe>(\".+\")|(.+))"); var exe = match.Groups["exe"].Value; var arguments = match.Groups["args"]?.Value ?? ""; ExecProcessAndWait(job.Id, exe, arguments, job.WorkPath); }, () => { if (job.Enable) { Jobs[jobIndex].State = JobState.Complete; } DeleteJob(job.Id); NotifyClientLog(job.Id, "================= CMD Server Finished =================="); UpdateClientJob(Jobs[jobIndex]); }, exception => { if (exception is AppDomainUnloadedException) { NotifyClientLog(job.Id, "================= CMD Server Uninstalled =================="); } else { _logger.Error(exception); NotifyClientLog(job.Id, "CMD Server Error。" + exception.Message); Jobs[jobIndex].State = JobState.Error; DeleteJob(job.Id); NotifyClientLog(job.Id, "================= CMD Server Error =================="); UpdateClientJob(Jobs[jobIndex]); } }); }
/// <summary> /// 执行DLL服务 /// </summary> /// <param name="job"></param> private void InvokeDllServer(ManageJob job) { var types = job.Params.Select(p => typeof(string)).ToArray(); var @params = job.Params.ToArray(); var jobIndex = Jobs.FindIndex(j => j.Id.Equals(job.Id)); if (jobIndex < 0) { return; } Jobs[jobIndex].State = JobState.Normal; UpdateClientJob(Jobs[jobIndex]); AsyncUtil.Run(() => { Thread.Sleep(500); Jobs[jobIndex].State = JobState.Normal; Jobs[jobIndex].PreviousFireTime = DateTimeOffset.Now; UpdateClientJob(Jobs[jobIndex]); NotifyClientLog(job.Id, "================= DLL Server Running =================="); _logger.Info($"Execute DLL Server Job:{job.Name}[{job.WorkPath}, {job.ClassName},{job.MethodName} ({string.Join(",", @params)})]"); var writer = new HlcTextWriter(); writer.WriteHandler += str => { NotifyClientLog(job.Id, str); }; var domainProxy = DynamicUtil.LoadDomain(job.WorkPath); _domainDict[job.Id] = domainProxy; domainProxy.SetOut(writer); var result = domainProxy.Invoke(job.ClassName, job.MethodName, types, @params); if (result != null) { NotifyClientLog(job.Id, $"DLL Server Result:{result.ToString()}"); } }, () => { //NotifyClientLog(job.Id, "DLL Server 运行完了?? 完了???"); DynamicUtil.UnloadDomain(_domainDict[job.Id]); _domainDict.Remove(job.Id); Jobs[jobIndex].State = JobState.Complete; NotifyClientLog(job.Id, "================= DLL Server Finished =================="); UpdateClientJob(Jobs[jobIndex]); }, exception => { if (exception is AppDomainUnloadedException) { NotifyClientLog(job.Id, "================= DLL Server Uninstalled =================="); } else { _logger.Error(exception); NotifyClientLog(job.Id, "Server Error。" + exception.Message); Jobs[jobIndex].State = JobState.Error; DynamicUtil.UnloadDomain(_domainDict[job.Id]); _domainDict.Remove(job.Id); NotifyClientLog(job.Id, "================= DLL Server Error =================="); UpdateClientJob(Jobs[jobIndex]); } }); }