相关文章推荐
风流倜傥的大熊猫  ·  Python Qt ...·  1 年前    · 
善良的高山  ·  Azure Application ...·  1 年前    · 

使用Quartz.net、Topshelf、wcf命名管道制作的一个c#定时任务管理程序(热插拔)

jackletter
展开
源码-github:https://github.com/jackletter/JackTime2Run

成品1.0-http://pan.baidu.com/s/1dESDTDn

使用到的技术:

1.Topshelf:用以承载window服务
2.Quartz.net:定时任务
3.wcf命名管道:进程间通信,管理界面监视定时任务执行情况
4.Appdomain实现热插拔:对于dll或exe做到不占用资源
5.动态编译:编译并执行单个cs文件

管理端界面:


编辑任务:

配置说明:
1.双击Manager.exe进入管理界面
2.第一次使用点击左侧按钮安装服务
3.服务安装好后点击开启服务
4.服务开启后点击刷新,即可看到当前配置的任务情况
5.若要启用、禁用、编辑、删除直接点击任务行对应的按钮即可
6.若要停止或卸载服务点击左侧对应按钮即可
7.若要添加任务点击左侧按钮即可
8.关于任务的配置属性说明:
8.1 任务分三种(调用dll、调用c#编写的exe、编译并调用单个cs文件)
8.2 共同配置,每个任务要有一个名称(设置好后就不可再改变)、Cron(定时任务表达式[http://jingyan.baidu.com/article/7f41ecec0d0724593d095c19.html])、日志类型(设置任务执行的成功与否的情况下是否记录日志)、是否可用

8.3 dll任务配置: 8.3.1 程序集搜索路径:要调用的dll或dll引用的程序集所在的路径,多路径使用";"分割,可以使用绝对路径或相对路径,比如我需要调用Dlls文件下的Demo2.dll那么我需要配置为"Dlls"。 8.3.2 完整类名:要调用的类的名称,这里要加上dll的名称,比如我要调用Demo2.dll中的类Program,那么我需要配置"Demo2.Program, Demo2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"。 8.3.2 方法名:要调用的类的方法,比如我要调用Demo2.dll中类Program的方法Show,那么我需要配置为"Show" 8.3.4 参数:要给调用的方法传递的参数值(要调用的方法必须接受string[]类型的参数),填写参数则调用具有字符串数组参数的方法,不填写参数则调用空参数的方法。 8.4 exe任务配置 8.4.1 程序集搜索路径、日志记录、是否可用同dll的配置。 8.4.2 完整类名:直接填写exe程序集的名称即可,比如我要调用Demo2.exe程序,就配置为"Demo2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 8.5 单个cs文件的配置 8.5.1 完整类名:直接写类的完整名称即可,比如我要调用Program.cs文件中的类Demo2.Program,就直接写"Demo2.Program"即可 8.5.2 程序集搜索路径、日志记录、是否可用、方法名同dll的配置。 8.5.3 cs文件路径:要调用的单个cs文件的路径,可以绝对地址或相对地址,比如我要调用DynamicCodes下的Program.cs文件则写"DynamicCodes\Program.cs" 8.5.4 单个cs文件的书写方法参照"DynamicCodes\Program.cs"
————————————————
版权声明:本文为CSDN博主「jackletter」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010476739/article/details/55818207

原文链接: https://blog.csdn.net/u010476739/article/details/55818207 2、拖入编辑控件,指定绑定字段; 3、结束。 为此,我设计了几个基类窗体,给它们分成几个场景(如无数据/单表数据/主从表/多表关联等),在不同的业务模型下,我选取相应的基类窗体进行继承。 首先,看看最基础的基类窗体,它包含了基础的处理(诸如多语言... 曾经也实现过.Net Framework 基于AppDomain 的 dll库 热插拔 ,经历了版本的迭代,.Net Core 不支持 AppDomain,之前也搞过.Net Core 3.1 版本的,现在搞一下子.NET 6.0的。主要运用到宿主与插件这个场景或者动态任务的场景上(假设你现在业务服务已经运行,但是,需要新增加新的业务功能,就可以用这种方式)。就像Office 或者 Visual Studio 一样,它们都是集插件架构之大成者。主要是根据 AssemblyLoadContext 这个系统提供的 USB Port Insert / Remove detection using WMI USB Port Insert / Remove detection using WMI (Source Code) USBWatcher.zip 实现类代码: USBWatcher.cs /* -------------------------------- 但是我发现有一种最简单粗暴的办法, 就是把插件加载到内存当中,然后 使用 Assembly从内存中加载DLL信息, 这样插件就可以直接被删除,而不会提示文件已被进程占用,而无法删... 模块之间独立开发 假设我们要做 一个 后台管理系统,其中包括“用户活跃度”、“产品管理”、"账单管理"等模块。每个模块中有自己的业务特性,这些模块都与具体业务高度耦合,很难由 一个 团队开发完所有模块。这样看来,由数据事业部的同事来开发“用户活跃度”模块,产品事业部的同时来开发“产品管理"模块会显得更加合理。现在我们假定由不同团队开发不同业务模... 热插拔 功能是PCIe SSD的一项重要功能, 能大大简化设备更换和调试步骤。特别是在服务器厂商推出支持 U.2 接口的产品后,对 热插拔 的需求更加广泛。 热插拔 在 PBlaze5 PCIe SSD应用非常成熟。这篇文章旨在为 使用 PBlaze5为代表的U.2接口的PCIe SSD进行 热插拔 操作提供参考。