private void btnSelPlugin_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "类库文件|*.dll"; if (openFileDialog.ShowDialog() == DialogResult.OK) { string dllPath = openFileDialog.FileName; string pluginName = Path.GetFileNameWithoutExtension(dllPath); if (!PluginsList.ContainsKey(pluginName)) { txt_dllName.Text = dllPath; txtPluginName.Text = pluginName; var loader = new AssemblyDynamicLoader(pluginName); loader.LoadAssembly(dllPath); PluginsList.Add(pluginName, loader); } else { MessageBox.Show("插件已加载"); } } }
/// <summary> /// 成功返回true ,false 失败有可能是已经存在或找不到jobname /// </summary> /// <param name="jobName"></param> /// <returns></returns> public IQuartzTask Add(string jobName) { if (this.QuartzSchedule == null || String.IsNullOrWhiteSpace(jobName)) { return(null); } string dllName = jobName + "QuartzTask.dll"; string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, jobName, dllName); string plugName = string.Concat(jobName, "Plug.txt"); string plugNamepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, jobName, plugName); var plugdic = configurationReader.Read(plugNamepath); byte[] assemblyBuf = File.ReadAllBytes(path); Assembly assembly = Assembly.Load(assemblyBuf); Type type = assembly.GetType(Path.GetFileNameWithoutExtension(dllName) + "." + jobName); if (type.GetInterface("IQuartzService") != null) { QuartzModel model = null; AssemblyDynamicLoader dyNamicLoader = new AssemblyDynamicLoader(jobName); dyNamicLoader.LoadAssembly(path); TaskBase task = new TaskBase(); IDictionary <string, object> dic = task.map; dic.Add("DyNamicLoader", dyNamicLoader); dic.Add("DyNamicMethod", Path.GetFileNameWithoutExtension(dllName) + "." + jobName); string timePression = ""; long timelongPression = 1000; bool bl = false; bl = plugdic.TryGetValue("CRONEXPRESSION", out timePression); if (!bl) { if (plugdic.TryGetValue("TIMESPAN", out timePression)) { if (!long.TryParse(timePression, out timelongPression)) { timePression = "1000"; } } } IJobDetail job = JobBuilder.Create(task.GetType()) .WithIdentity(plugdic["JOBNAME"], plugdic["GROUPNAME"]) .UsingJobData(new JobDataMap(dic)) .Build(); TriggerBuilder triggerBuilder = TriggerBuilder.Create() .WithIdentity(plugdic["JOBNAME"] + "TRIGGER", plugdic["GROUPNAME"]) .StartNow(); if (bl) { triggerBuilder.WithCronSchedule(timePression); } else { triggerBuilder.WithSimpleSchedule (x => x.WithInterval(new TimeSpan(timelongPression)) .RepeatForever()); } ITrigger trigger = triggerBuilder.Build(); model = new QuartzModel(plugdic["JOBNAME"], job, trigger); if (!this.QuartzSchedule.CheckExists(model)) { this.QuartzSchedule.AddJob(model); } } return(null); }
internal void ScanQuartzExterior() { string runroot = AppDomain.CurrentDomain.BaseDirectory; var subDir = Directory.GetDirectories(runroot); foreach (var dir in subDir) { var dinfo = new DirectoryInfo(dir); string dllName = string.Concat(dinfo.Name, "QuartzTask.dll"); string path = Path.Combine(dir, dllName); string plugName = string.Concat(dinfo.Name, "Plug.txt"); string plugNamepath = Path.Combine(dir, plugName); if (!File.Exists(plugNamepath)) { continue; } var plugdic = configurationReader.Read(plugNamepath); try { byte[] assemblyBuf = File.ReadAllBytes(path); Assembly assembly = Assembly.Load(assemblyBuf); Type[] types = assembly.GetTypes(); foreach (var item in types) { if (item.GetInterface("IQuartzService") != null) { QuartzModel model = null; AssemblyDynamicLoader dyNamicLoader = new AssemblyDynamicLoader(dinfo.Name); dyNamicLoader.LoadAssembly(path); TaskBase task = new TaskBase(); IDictionary <string, object> dic = task.map; dic.Add("DyNamicLoader", dyNamicLoader); dic.Add("DyNamicMethod", Path.GetFileNameWithoutExtension(dllName) + "." + dinfo.Name); string timePression = ""; int timelongPression = 1000; bool bl = false; bl = plugdic.TryGetValue("CRONEXPRESSION", out timePression); if (!bl) { if (plugdic.TryGetValue("TIMESPAN", out timePression)) { if (!int.TryParse(timePression, out timelongPression)) { timePression = "1000"; } } } IJobDetail job = JobBuilder.Create(task.GetType()) .WithIdentity(plugdic["JOBNAME"], plugdic["GROUPNAME"]) .UsingJobData(new JobDataMap(dic)) .Build(); TriggerBuilder triggerBuilder = TriggerBuilder.Create() .WithIdentity(plugdic["JOBNAME"] + "TRIGGER", plugdic["GROUPNAME"]) .StartNow(); if (bl) { triggerBuilder.WithCronSchedule(timePression); } else { triggerBuilder.WithSimpleSchedule (x => x.WithInterval(new TimeSpan(0, 0, 0, 0, timelongPression)) .RepeatForever()); } ITrigger trigger = triggerBuilder.Build(); model = new QuartzModel(plugdic["JOBNAME"], job, trigger); if (!this.QuartzSchedule.CheckExists(model)) { this.QuartzSchedule.AddJob(model); } } } } catch (Exception oe) { Debug.WriteLine(oe.Message); } } }
public IQuartzTask Add(PlugModel plug) { if (this.QuartzSchedule == null || plug == null) { return(null); } string runroot = AppDomain.CurrentDomain.BaseDirectory; string path = Path.Combine( runroot, plug.DllRelativeDir, plug.DllIQuartzServiceImplementFile ); if (!File.Exists(path)) { throw new ArgumentException("找不到需要载入的目录或文件", path); } byte[] assemblyBuf = File.ReadAllBytes(path); Assembly assembly = null; if (assemblyBuf.Length > 0) { assembly = Assembly.Load(assemblyBuf); } else { return(null); } Type[] types = assembly.GetTypes(); try { foreach (var type in types) { if (type.GetInterface("IQuartzService") != null) { QuartzModel model = null; AssemblyDynamicLoader dyNamicLoader = new AssemblyDynamicLoader(plug.DllRelativeDir); dyNamicLoader.LoadAssembly(path); TaskBase task = new TaskBase(); IDictionary <string, object> dic = task.map; dic.Add("DyNamicLoader", dyNamicLoader); dic.Add("DyNamicMethod", type.FullName); IJobDetail job = JobBuilder.Create(task.GetType()) .WithIdentity(plug.JobName, plug.GroupName) .UsingJobData(new JobDataMap(dic)) .Build(); TriggerBuilder triggerBuilder = TriggerBuilder.Create() .WithIdentity(plug.JobName + "Trigger", plug.GroupName) .StartNow(); if (!string.IsNullOrEmpty(plug.CronexPression)) { triggerBuilder.WithCronSchedule(plug.CronexPression); } else { triggerBuilder.WithSimpleSchedule (x => x.WithInterval(new TimeSpan(0, 0, 0, 0, plug.TimeSpan)) .RepeatForever()); } ITrigger trigger = triggerBuilder.Build(); model = new QuartzModel(plug.JobName, job, trigger); return(Add(model)); } } } catch (Exception oe) { Debug.WriteLine(oe.Message); } return(null); }