.NET自动服务程序—C#(一)

原创 2004年01月09日 09:55:00

.NET自动服务程序—C#(一)

 

追风(VisualSW)

 

应用程序开发中,常常需要实现这样一种功能:让服务器在每天的特定时刻运行固定的程序(或者实现固定的操作),比如让系统在每天的200备份数据库数据。要实现这样的功能,我们可以使用Windows服务(Windows service)。

Windows service是一种系统自动的、无人值守的程序(仅存在于Windows NT2000XP操作系统中),它能够在系统启动时开始运行。用户可以通过Service Control Manager (SCM) applet或者一些特殊的service-control应用来访问Windows service,使服务在没有用户登录到系统之前执行。

        .NET出现以前,编写Windows服务是VC++Delphi才能办到的事情,

VB必须使用第三方控件才可以办到,而且编写起来特别的复杂。使用Microsoft®.NET Framework,我们可通过创建作为服务安装的应用程序来方便地创建Windows服务。

 

设计:

一个Windows服务程序,按照配置文件中的配置,在指定时刻运行指定程序。

流程:

启动服务à读取配置文件à启动定时器

定时器定时触发(比如每隔30)à循环需要运行组件时间à时间到à运行指定程序

编写:

创建一个Windows Service

Server1.cs更名为SchedulerServer.cs

双击SchedulerServer.cs打开设计页面,从工具栏的组件中拖Timer控件。

更名为SchedulerTimer,并设置Enabledflase

注意必须是Components里面的Timer控件,Windows Forms里面的Timer控件不行。

 

F7浏览代码可以看到如下代码

 

服务器启动的时候运行:

/// <summary>

/// Set things in motion so your service can do its work.

/// </summary>

protected override void OnStart(string[] args)

{

        // TODO: Add code here to start your service.

}

 

服务停止的时候运行:

/// <summary>

/// Stop this service.

/// </summary>

protected override void OnStop()

{

        // TODO: Add code here to perform any tear-down necessary to stop your service.

}

 

添加写日志函数,用来记录服务的日志:

public static void WriteLog(string strLog)

                {

                        string strPath;

                        strPath=System.Environment.SystemDirectory;

                        strPath+=@"/SchedulerServer.txt";

                        FileStream fs = new FileStream(strPath,FileMode.OpenOrCreate,FileAccess.Write);

                        StreamWriter m_streamWriter = new StreamWriter(fs);

                        m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);

                        m_streamWriter.WriteLine(strLog);                       

                        m_streamWriter.Flush();

                        m_streamWriter.Close();

                        fs.Close();

                }

 

 

自动服务配置文件

配置文件保存在系统目录,Windows 2000WinNT/System32,文件名为SchedulerServer.xml,存储了自动服务的所有配置信息,下面我们来看SchedulerServer.xml的格式:

<SchedulerServer>

        <AutoServer>

                <FilePath>C:/AutoBackup.dll</FilePath>

                <RunTime>02:00</RunTime>

        </AutoServer>

        <AutoServer>

                <FilePath>D:/AutoMail.dll</FilePath>

                <RunTime>03:00</RunTime>

        </AutoServer>

</SchedulerServer>

 

FilePath设置需要运行的组件的路径

RunTime设置需要运行的时间

如果有多个程序需要运行,只需要添加<AutoServer>节点

 

程序中添加读取配置文件函数:

private bool ReadConf()

                {

                        try

                        {

                                string strPath;

                                XmlDocument xmldoc=new XmlDocument();

                                XmlNodeList xmlnd;

 

                                strPath=System.Environment.SystemDirectory+@"/SchedulerServer.xml";

                                xmldoc.Load(strPath);

                                xmlnd=xmldoc.SelectNodes("SchedulerServer/AutoServer");

                                arrConf=new String[2,xmlnd.Count];

                               

                                for(int i=0;i<xmlnd.Count;i++)

                                {

                                        arrConf[0,i]=xmlnd[i].SelectSingleNode("FilePath").InnerXml.Trim();

                                        arrConf[1,i]=xmlnd[i].SelectSingleNode("RunTime").InnerXml.Trim();

                                }

                                return true;

                        }

                        catch(Exception e)

                        {

                                WriteLog(DateTime.Now.ToString());

                                WriteLog("Read Configuration Error:");

                                WriteLog(e.ToString());

                                return false;

                        }

 

                }

Jenkins 持续集成.net自动编译测试和部署

在HIS项目里,我们使用了jenkins (原hudson, http://www.jenkins-ci.org/)作为CI server,开源肯定是最基本的考虑,jenkins是java生态圈中的一...
  • sharkpeng
  • sharkpeng
  • 2016年08月09日 16:56
  • 3302

.net代码生成器大全

1:CodeSmith       一款人气很旺国外的基于模板的dotnet代码生成器 官方网站:http://www.codesmithtools.com 官方论坛:http://forum.c...
  • guozh
  • guozh
  • 2015年04月06日 11:06
  • 3681

C#.net cookie、session实现自动登陆

一、什么是用户自动登录?    对于我们的网站向已注册用户提供某些专门的服务,比如网上购物、在线下载、收费浏览等等,就会要求用户在使用这些服务之前进入登录页面,输入用户名和密 码,并进行验证。  ...
  • lvdou2518
  • lvdou2518
  • 2014年01月24日 19:45
  • 1307

Jenkins搭建.NET自动编译测试与发布环境

操作系统Windows, http://jenkins-ci.org/下载Windows安装包。安装后,访问http://localhost:8080 . Jenkins => Manager Jen...
  • wangjia184
  • wangjia184
  • 2014年01月20日 17:42
  • 32411

C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe

转载:http://blog.csdn.net/testcs_dn/article/details/9903727 不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建Service...
  • gooodiuck
  • gooodiuck
  • 2015年12月10日 13:42
  • 331

C# 实现客户端程序自动更新

由于微软提供的更新程序使用不方便,所以又写了此程序。此程序是本人一年前所写的一段程序,当时在开发一个CS版本报价系统,当时由于开发过程仓促,代码可能有点不是太规范此程序编译后只有一下AutoUpdat...
  • a389483637
  • a389483637
  • 2014年06月10日 09:12
  • 1640

.net framework 打包进 msi安装包,使得安装时自动安装

原文地址:点击打开链接 在visual studio 2005中把.net framework打包进MSI安装包是非常容易。 我们首先要为自己的工程添加一个Setup工程: 1、文件...
  • qq798833488
  • qq798833488
  • 2016年08月29日 16:11
  • 1651

CAutoupdater通用自动升级组件

CAutoupdater通用自动升级组件 1、CAutoupdater通用自动升级组件介绍1.1、组件介绍C/S构的特点是能充分发挥客户端的处理能力,很多工作可以由客户端处理后再提交给服务器,对应的优...
  • chinahuyong
  • chinahuyong
  • 2013年01月17日 15:48
  • 14372

C#(asp.net)仿baidu或google智能匹配搜索下拉框

页面文件代码: //文本输入框 //选择后的数字值 //下拉框的点击  
  • zlggyn
  • zlggyn
  • 2014年07月28日 08:29
  • 876

C#高级编程六十九天----DLR简介

DLR 一.近年来,在TIOBE公司每个月发布的编程语言排行榜中,C#总是能挤进前十名,而在最近十年来,C#总体上呈现上升的趋势.C#能取得这样的成绩,有很多因素,其中它在语言特性上的锐意进取让人印...
  • shanyongxu
  • shanyongxu
  • 2015年08月05日 10:58
  • 1329
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.NET自动服务程序—C#(一)
举报原因:
原因补充:

(最多只允许输入30个字)