服务基础

安装
管理员打开cmd

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
InstallUtil.exe Path_WinSvc.exe

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

基础

原生实现

  • ServiceBase
  • ServiceInstaller

问题梳理

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

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

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

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

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

%复制安装文件至当前目录%
copy C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.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

Windows服务 + Quartz.NET的更多相关文章

  1. Quartz.NET Windows 服务示例

    想必大家在项目中处理简单的后台持续任务或者定时触发任务的时候均使用 Thread 或者 Task 来完成,但是项目中的这种需求一旦多了的话就得将任务调度引入进来了,那今天就简单的介绍一下 Quartz ...

  2. Quartz.Net在windows服务中的使用

    写在前面 这几天在弄一个项目,需要定时抓取一些数据,当时也想直接用timer算了.因为之前也弄过这样的项目,但是一想,已经用过了,再去使用同一种思路,未免太乏味了.就换了一种新玩法.这里将之前看到的一 ...

  3. Windows服务调用Quartz.net 实现消息调度

    Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不牺牲 ...

  4. 使用普通Windows服务创建Quartz.Net服务项目

    Quartz.NET 项目地址 http://quartznet.sourceforge.net/ 源码下载地址:Quartz.Net.2.0 首先创建Quartz.Net.2.0解决方案,添加 Wi ...

  5. 子线程导致 Windows 服务停止的情况(Topshelf 结合 Quartz.NET)

    Ø  前言 本文主要记录子线程导致 Topshelf 和 Quartz.NET 的 Windows 服务停止的现象,以及使用几种常用子线程的注意事项.因为我们有时可能需要开启多个线程执行复杂的逻辑,如 ...

  6. 使用 Topshelf 结合 Quartz.NET 创建 Windows 服务

    Ø  前言 之前一篇文章已经介绍了,如何使用 Topshelf 创建 Windows 服务.当时提到还缺少一个任务调度框架,就是 Quartz.NET.而本文就展开对 Quartz.NET 的研究,以 ...

  7. windows 服务实现定时任务调度(Quartz.Net)

    我们通常在一些情况下需要软件具有一个自动执行某些任务的功能,但是又不希望直接启动软件,或者每次都要手动的来启动软件,这时我们可可以考虑到windows服务了. 首先创建一个windows服务项目(详细 ...

  8. Quartz+TopShelf实现Windows服务作业调度

    Quartz:首先我贴出来了两段代码(下方),可以看出,首先会根据配置文件(quartz.config),包装出一个Quartz.Core.QuartzScheduler instance,这是一个调 ...

  9. Quartz.NET+Topshelf 创建Windows服务

    由于项目开发中经常会有定时任务执行的需求,所以会第一时间就想到 windows 服务 的方式,但是做过开发的同学都知道windows服务不利于调试,安装也麻烦: 并且有开源的作业框架Quartz.NE ...

随机推荐

  1. python中 将数字转化为人民币的形式

    def fn(args): """ 将金额转化为人民币模式,带逗号分隔,保留小数点两位,四舍五入 :param args: :return: ""&q ...

  2. Linux (Ubuntu)安装ssh

    看ssh服务是否启动 打开"终端窗口",输入sudo ps -e |grep ssh 回车有sshd,说明ssh服务已经启动, 如果没有启动,输入sudo service ssh ...

  3. Swift学习 (二)

    2.控制流: 主要有三种类型的语句 if,switch和新增的guard for,while break,continue 关于if 语句里的条件不再需要使用()包裹了. 1 2 3 4 let nu ...

  4. swift 屏幕的翻转 + 状态栏(statusBar)的隐藏

    1.状态栏的隐藏 这个问题是基于 UIApplication.shared.isStatusBarHidden = true; 调用居然是无效的…… 现在写下自己的代码,用来备忘吧…… 1.首先需要复 ...

  5. 如何配置docker仓库

    创建文件 /etc/docker/daemon.json,写入国内镜像URL地址 { "registry-mirrors": [ "https://rq5uyt7.mir ...

  6. linux防火墙学习

    iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分.可以直接配置,也可以通过许多前端和图形界面配置.语法: iptables(选项)(参数)1,命令选项-t<表 ...

  7. Clustering and Exploring Search Results using Timeline Constructions (paper2)

    作者:Omar Alonso 会议:CIKM 2009 摘要: 截至目前(2009),通过提取文档中内嵌的时间信息来展现和聚类,这方面的工作并不多. 在这篇文章中,我们将提出一个“小插件”增添到现有的 ...

  8. win10系统,jdk环境变量配置,编辑系统变量窗口显示旧版单行和新版列表问题

    大家好,今天说一下我在配置jdk环境变量时遇到的编辑系统变量窗口显示问题. 首先我们说一下如何配置jdk环境变量. 右击此电脑,点击属性. 跳出如下窗口,点击高级系统设置. 跳出如下窗口,点击环境变量 ...

  9. 第3章:LeetCode--算法:strStr KMP算法

    https://leetcode.com/problems/implement-strstr/  28. Implement strStr() 暴力算法: int ViolentMatch(char* ...

  10. 100天搞定机器学习|Day4-6 逻辑回归

    逻辑回归avik-jain介绍的不是特别详细,下面再唠叨一遍这个算法. 1.模型 在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳性,目标变量是离散的,只有两种取值,通常会编码为0和1.假设 ...