예제 #1
0
        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;
            });
        }
예제 #2
0
        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();
            });
        }
예제 #3
0
        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");
            });
        }
예제 #4
0
        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");
            });
        }
예제 #5
0
        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");
            });
        }
예제 #6
0
 private void RefreshJobView(string selectedId = null)
 {
     lock (this)
     {
         AsyncUtil.Run(() => _jobManagerProxy.GetAllJobs(), jobs =>
         {
             RefreshJobView(jobs, selectedId);
         }, exception =>
         {
             _logger.Error(exception, "Refresh Job Error");
         });
     }
 }
예제 #7
0
        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();
        }
예제 #8
0
        /// <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]);
                }
            });
        }
예제 #9
0
 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");
     });
 }
예제 #10
0
        /// <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]);
                }
            });
        }
예제 #11
0
        /// <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]);
                }
            });
        }