zoukankan      html  css  js  c++  java
  • 编写Windows Service 备忘

    项目需求要做一个定时扫表,将按条件查询到的数据插入或者更新到另一个数据表的需求,老大要求让用window service来做

    因为以前没有做过,把这次的经历写出来.作为备忘.

    1.什么是windows服务

    以下部分内容来自http://www.cnblogs.com/salomon/archive/2012/05/21/2511643.html

    Windows服务,微软的官方定义是这样的:Microsoft Windows 服务(即以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的

    可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这些功能使服务非常适合在服务器上使用,每当

    需要使用不会影响在同一台计算机上工作的其他用户的功能时也适用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。   

    这种描述过于抽象而且笼统。那么究竟什么是服务呢?首先Windows服务和普通应用一样是是一个应用程序,一个后台进程。但它又十分特殊,特殊在以

    下几点:  

      1.它通常在系统启动时用户登录Windows之前由NET kernel中的SCM(Service Control manager)加载,并一般在系统启动时自动开启的。  

      2.Windows服务独立于特定用户之上,也就是说它可以被一台计算机上任何用户所共用。   

    如果一个应用需要长时间的后台运行,并且独立于某个特定用户控制台,我们可以考虑把它写成Windows服务。它通常没有界面(没有硬性限制,可以编

    写有界面的Windows服务),通常随机启动,随机关闭而关闭,但也可以随用户需要手动启动,一般两种方法:1 Control Panel -> Administrative Tools

    -> Services  2,由其它程序调用SCM提供的接口开启。类似于Windows服务东西比如UNIX的daemons,Dos下的运行于AUTOEXEC.BAT或者 CONFIG.SYS的TSR。常见的服务包括硬件驱动(打印机等),FTP服务,数据库服务,WEB服务等等。

    2.编写

    2.1 首先创建windows服务项目

    如图,我们在创建项目的时候选择windows 服务项目.来进行创建

    2.2编写业务逻辑代码

    我们也可以将服务类 进行重命名. 这里的OnStart方法在服务启动的时候调用,

    所以我们可以将业务逻辑写在这里.建议封装一个类和方法来封装业务逻辑操作,然后在这里调用该类的方法

    OnStop方法在服务停止的时候调用,我们在这里可以写一些处理逻辑

    3.设置服务名称和登录权限

    在  服务的 的设计界面 右键-添加安装程序.会添加一个ProjectInstaller.cs 类.

    这里我们需要注意两件事.

    A.为设计界面中 serviceInstaller1 控件设置服务的启动类型

    Automatic--自动启动

    Manual--手动启动

    B.设置服务启动登录权限

    这里我们选择 以本地系统的权限来启动.

    4.安装服务

    windows 服务 微软提供了自带的安装程序 InstallUtil.exe

    以管理员身份运行该程序,然后安装 你编译好的服务

    cmd 会提醒你服务是否安装成功

    5.查看服务状态

    5.删除服务

    我们在调试过程中,可能需要删除服务,然后修改代码.然后重新安装服务,再次调试.

    注意,必须先删除服务 否者生成失败.

    注意,删除服务之前必须先停止服务.否则删除失败.

    建议开两个 CMD不要关闭 一个安装 一个删除,

    6.进行服务调试

    发开的时候我们要测试业务逻辑和我们预期的是否一致,但是调试服务又很麻烦.

    我们可以在Program.cs

     static void Main()
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new Service1() 
                };
                ServiceBase.Run(ServicesToRun);
            }
    

     在这里调用你的业务类.new 出来直接调用

    下面的注释掉.

    Main函数也是这个服务启动的入口.

    我们将服务安装到本机并且启动之后,也可以以附加到进程的方式调试服务运行

  • 相关阅读:
    CRM后期修改实体,新增货币类型字段 需要注意的问题
    CRM setValue方法日期类型字段赋值
    win10 ie11 以管理员身份运行才正常
    博客随缘更新,更多内容访问语雀知识库!
    解决Vulnhub靶机分配不到IP问题
    栈迁移原理图示
    【python】青果教务系统模拟登陆
    【二进制】CTF-Wiki PWN里面的一些练习题(Basic-ROP篇)
    2019"深思杯"山东省大学生网络安全技能大赛部分wp
    【web】docker复现环境踩坑
  • 原文地址:https://www.cnblogs.com/ruhuaxiao/p/4629967.html
Copyright © 2011-2022 走看看