一、Windows Service 服务,可以在用户未登录的时候开始运行提供服务(下图)

image

二、开始建立一个Windows 服务

1.打开VS2008 新建一个Windows 服务项目

2009-10-01_144618

系统会默认的建立一个

Program.cs 是启动文件,里面有如下代码用来启动服务

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

2.Service1.cs 服务类。继承自System.ServiceProcess.ServiceBase

右键点击此文件,点击“查看代码”,打开类代码视图可以找到几个重载方法

image

OnStart方法来响应启动服务的事件

OnStop方法来响应停止服务的事件

OnPause方法来响应暂停服务的事件

OnContinue方法来响应恢复提供服务的事件

在重载这些方法时必须要立即返回,其中不能出现长时间的操作,若处理时间过长则Windows服务管理器会觉得该Windows服务停止响应而报错。

3.在“设计器视图”右键,会看到一个添加“添加安装程序”,添加一个ProjectInstaller.cs

image

ProjectInstaller.cs  安装服务,继承自System.Configuration.Install.Installer,该类用于配合微软.NET框架自带的安装命令行工具InstallUtil.exe

将此文件的serviceProcessInstaller1->Accout属性,设为:LocalSystem(默认是User)。

 

4.现在要实现点小功能来学习一下Windows 服务,

功能是简单实现:每隔5秒向SQL数据库插入一条数据,然后将SQL语句记录到指定的TXT文件中做日志,

可以将写好的功能组件引用进来使用,如果没有可以简单的新建类库项目,打开默认的Class1.cs文件,写以下几句代码

 

namespace ClassLibrary1
{
    public class Class1
    {
        public static void Test()
        {
            LogService ls = new LogService();
            ls.InitLog("WindowsService", "d:\\log\\");
            ls.WriteLog(" -------------------------------" + DateTime.Now.ToString() + "------------------------------------------");
            try
            {
                using (SqlConnection cn = new SqlConnection("Data Source=192.168.1.20;Initial Catalog=TestWindowsService;User ID=sa;Password=saaaaa"))
                {
                    cn.Open();
                    using (SqlCommand cm = cn.CreateCommand())
                    {
                        cm.CommandType = CommandType.Text;
                        cm.CommandText = "INSERT INTO T_Test (InsertTime) VALUES (@insertTime)";
                        cm.Parameters.AddWithValue("@insertTime", DateTime.Now.ToString());
                        cm.ExecuteNonQuery();
                        ls.WriteLog("操作成功!SQL语句:" + cm.CommandText);
                    }
                }
            }
            catch (Exception ex)
            {
                ls.WriteLog("操作失败:" + ex);
            }
        }
    }
}

将类库项目引用到服务项目中来,添加一个System.Timers下的Timer控件,在Elapsed事件中就可以直接调用

5.手动安装:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe  FilePath\xx.exe

这个FilePath,就是程序文件夹中Debug目录先的  项目名.exe  文件 ,我一直是默认建的,所以这里是WindowsService1.exe

image

安装成功,会在本文的第一个图片位置找到服务名为Service1的服务选项,手动的启动它一下,可以在D:\log下看到日志

 

6.卸载:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -u FilePath\xx.exe

image

卸载后页面中没有了图片中的服务

7.最后:

可以为Windows 服务添加客户端,也可以在启动程序中编写不使用 InstallUtil.exe  的安装,这些都可以在完成功能的时候加上,方法网上可以找到。

调试服务可以使用附加进程的方式,也可以直接将功能组件开发好调用或者是设置调试线程等方法进行调试,也可以建立测试调试。

8.实例代码下载:WindowsService1.rar

posted on 2009-10-01 17:39  冯瑞涛  阅读(896)  评论(0编辑  收藏  举报