C#制作Windows service 服务 实战 ip 地址的实时 扫描(网络跟踪的问题)

来源:互联网 发布:数控车床cnc编程入门 编辑:程序博客网 时间:2024/06/09 16:38

      Windows服务以前被称作NT服务,是一些运行在WindowsNT、Windows2000和WindowsXP等操作系统下用户环境以外的程序。

     通过本文vs2010创建c# windowService 应用程序可以帮助你解决

           如果创建c# windowService项目程序?

           如何创建网络ip地址扫描监控程序?

            如何创建window服务的安装程序?

   最后还有一windowfrom 程序 对服务 监控的 ip 地址 进行验证

 

        最近给一个县里某局 做一个网络监控 的小程序,目的是通过网络 监控全县摄像头,是否正常运行,是否有故障,统计摄像头的正常运行率 和故障率各为多少,全县总的摄像头运行率为多少?要求 每天 对全县的摄像头每小时监控一次,每月底的时候给出一个报表。

       根据要求我们能够知道对摄像头的跟踪程序最好用 windows 服务来解决,服务的最大好处就是 不用人为的去干扰他,程序自动执行,好了 我们废话少说现在正式开始。

(一)数据库的建立

     

首先 我们创建数据库NetWorkIpDB,创建两个表一个存放 摄像头的ip地址 IpTable,一个 存放 对 IP 地址的监控情况IpCheck

IpTable表:(这个表里的数据 是用其他程序 添加进去的) 结构如下:

  

IpCheck 表结构


所有的bh 都是自增字段


(二)windows 服务的创建

  第一步创建windows 服务的框架,启动vs2010-文件à-新建—>项目-->创建 windows服务如下图:

名称为:IpNetWork  单击确定

具体的windows 服务的 详细 内容比如:包含的类,函数等我在这里不一一讲解,我主要是 想让大家通过这个例子学会编写自己的服务,其他的windows 服务的知识 大家可以找其他资料来学习

在服务中我们 必须了解ServiceBase 类定义了一些可被其子类重载的函数,通过这些重载的函数,服务控制管理器就可以控制该Windows服务程序了。这些函数包括:OnStart()、 OnStop()、OnPause()以及OnContinue()等四个。而且ServiceBase类的子类还可以重载 OnCustomCommand()函数来完成一些特定的操作。通过重载以上的一些函数,我们就完成了一个Windows服务程序的基本框架,这个程序里我主要使用了下面两个 重载方法:

protected override void OnStart(string[]args)

{

}

protected override void OnStop()

{

}


第二步:向程序中添加功能

拖入两个 时间控件 timer

注意这两个时间控件有要求, 不能添加winForm下的Timer控件,否则不能触发时间控件程序,要用systemTimer下的时间空进,方法如下

打开"工具箱"---右键---"选择项"---找到Timer控件,看好了,这个Timer控件的是system.Timer下的.可不是System.Windows.Form.然后添加.

设置Timer1 的时间间隔为:1000 毫秒,如果你的网络带宽比较慢 可以设置为 1500毫秒,太短了,有可能出现,服务器ping  远程的摄像头时

返回的icmp 信息时间 太长超过1秒中

timer2 的时间间隔为:60000毫秒, 也就是一分钟,根据这个时间间隔,我们可以 通过 循环来加长这个时间间隔,如 每过一小时 就扫描一次

摄像头。


现在来看代码:


OnStart(string[] args) 方法代码及功能:

读配置文件:数据库配置和 多长时间扫描 开始对户外摄像头进行扫描

下面为 配置文件

Interval =1 每分钟对所有摄像头 进行 扫描一次,可以改为 1小时 即 Interval =60 或两小时 Interval =120

下面代码,从数据 Iptable中 取出 所有 摄像头的 ip地址,放到 程序数组里面  private string[]IpAddress;


当服务停止时,写入停止日志



Timer1 控件timer1_Elapsed 事件内容,对摄像头进行监控,同时把监控结果 存入到 数据库中,用 i 这个变量来循环数组,对所有的摄像头 进行监控,

循环完结束,等待下一次 监控。


对摄像头监控的方法:通为:true,否则为 :false


接下来 根据要求 每过一小时 对摄像头进行监控,我们写 timer2  的事件如下:



到这里 这个服务的 所有功能就 完成了,接下来 就要 为服务添加 安装程序了,

(三)为windows服务添加安装程序

在 Service1.cs 设计页面 单击右键 在弹出的 窗体中 单击 ----添加安装程序,如下图


这时项目中就添加了一个新类ProjectInstaller和两个安装组件:serviceProcessInstaller1、serviceInstaller1

设置serviceProcessInstaller1组件,Account  属性为:LocalSystem    //任何用户登录,服务都会启动

设置serviceInstaller1组件、

Parent 属性设为:serviceProcessInstaller1

ServiceName属性为:网络监控   //在服务里显示的服务名称

Starttype 属性设为:Automatic    //每次重新启动电脑让服务自动启动


(四)生成服务程序

从菜单 单击生成生成服务应用程序,不要运行


(五)安装服务程序

 把安装程序installutil.exe 复制到要安装的目录下

注: installutil.exe的所在位置windows/microsoft.net frameworks/x.xx(version)/installutil.exe

如下:(我把生成的文件从debug 下面拷出来了)



在dos 下运行 如下命令

安装完成

 

打开服务能够看到服务里面拥有了 我们自己写的一个服务,是不是很有成有感!!


到这里 我们的 整个服务 就完成了,接下来 我们要 测试一下我们写的服务,

工作的是否 完好,测试 我放在下一次完成,下一篇文章,我会写一个 winform 应用程序 来验证 我们的服务 运行情况,同时给出 程序源码

下次见

我已经 上传了一个 服务的 源代码,大家可以下载看看