zoukankan      html  css  js  c++  java
  • Windows服务 + Quartz.NET

    服务基础

    安装
    管理员打开cmd

    cd C:WindowsMicrosoft.NETFrameworkv4.0.30319
    InstallUtil.exe Path_WinSvc.exe
    

    或者 将 InstallUtil.exe 直接拷贝到生成目录,运行 InstallUtil WinSvcName.exe

    基础

    原生实现

    • ServiceBase
    • ServiceInstaller

    问题梳理

    在初始化安装时发生异常:System.BadImageFormatException:
    未能加载文件或程序集“file:///F:ITC#WinSvcTestWinSvcReleaseWinSvcSqh.exe”或它的某一个依赖项。
    试图加载格式不正确的程序。

    解决:注意生成-目标平台(x64 or x86)以及应用程序-目标框架

    在“安装”阶段发生异常:“System.Security.SecurityException:未找到源,但未能搜索某些或全部事件日志。
    不可访问的日志: Security。”
    

    解决:不通过cmd窗口,改用.bat文件,右键以管理员身份运行。

    安装服务Install.bat如下,仅供参考:

    %复制安装文件至当前目录%
    copy C:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe  %~dp0
    %切换到当前bat文件所在目录%
    cd /d %~dp0
    %执行安装命令%
    installutil  WinSvcSqh.exe
    @pause;

    最后,在 我的电脑-右键属性-服务 中即可看到新增的windows服务。

    • 启动服务:直接右键-Start,或者 管理员身份运行cmd执行 net start WinSvcSqh
    • 停止服务:右键-Stop,或者 管理员身份运行cmd执行 net stop WinSvcSqh

    看下代码,基本windows服务如下

    partial class WinSvcSqh : ServiceBase
    {
    	public WinSvcSqh() {
    		InitializeComponent();
    	}
    
    	protected override void OnStart(string[] args) {	
    		// do something
    	}
    
    	protected override void OnStop() {
    		// do something
    	}
    }
    

    主程序启动代码如下

    /// 应用程序的主入口点。
    public static void Main()
    {
    	ServiceBase[] ServicesToRun;
    	ServicesToRun = new ServiceBase[] { 
    		new WinSvcSqh()
    	};
    	ServiceBase.Run(ServicesToRun);
    }
    

    基础教程参见: https://www.cnblogs.com/cncc/p/7170951.html

    Castle

    • IOC框架
    • 定时任务、日志服务

    具体参见:.Net IOC框架 | sqh

    扩展

    目标:TopShelf+Quartz.net实现基于window服务的定时任务调度

    Topshelf

    官网 | Topshelf,开源,跨平台的宿主服务框架(Windows服务开发框架),便捷创建 windows服务。

    • 允许使用控制台程序开发windows服务,方便调试
    • 支持多实例的部署
    • 集成log4net

    结合 Quartz,实现任务调度服务。

    Quartz .Net

    官网 | Quartz,开源,企业级定时计划任务调度框架,支持 .NET Core。

    初步学习:Quartz .net开源job调度框架,相关参见Github上的demo示例:JobScheduleDemoCode

  • 相关阅读:
    基于javascript引擎封装实现算术表达式计算工具类
    Windows 服务入门指南
    参数化查询为什么能够防止SQL注入
    Control 的DraggerHelper, 拖动控件从此变得很简单。。。
    书籍推荐记这几年看的书
    使用“using” 的 “Cursor”
    多线程,silverlight_Rest_WCF,dynamic 索引帖
    关于静态事件 static event 的二三事
    探讨 .NET 4 新增的 SortedSet 类
    我们需要莱特希尔报告
  • 原文地址:https://www.cnblogs.com/wjcx-sqh/p/10526218.html
Copyright © 2011-2022 走看看