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

  • 相关阅读:
    母函数详解
    java中为什么要实现序列化,什么时候实现序列化?
    cocos2dx&cocosbuilder折腾记
    Unity3D系列教程–使用免费工具在Unity3D中开发2D游戏 第二节(下)
    分頁查詢
    獲取CPU,硬盤序列號
    spcomm
    dbgrideh的導入和導出
    程序窗体及控件自适应分辨率
    組合的藝術
  • 原文地址:https://www.cnblogs.com/wjcx-sqh/p/10526218.html
Copyright © 2011-2022 走看看