C# 开发windows 服务

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

[img]http://dl.iteye.com/upload/attachment/162396/69c96707-1d49-3fb4-847c-cb3fe05ef45f.png[/img]

二、开始建立一个Windows 服务

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

[img]http://dl.iteye.com/upload/attachment/162394/43cc2793-ecdf-3b06-beb4-9e9b2f440cf0.jpg[/img]

系统会默认的建立一个

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

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



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

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

[img]http://dl.iteye.com/upload/attachment/162398/55dff714-675f-3e19-b297-bf9daa3dbf06.png[/img]

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

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

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

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

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

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

[img]http://dl.iteye.com/upload/attachment/162400/d822d652-ced6-3dee-9109-348de65e8c1d.png[/img]

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

[img]http://dl.iteye.com/upload/attachment/162402/759383af-439e-3a17-b15e-617185eec6bc.png[/img]

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


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

[img]http://dl.iteye.com/upload/attachment/162404/81593982-54ee-3f9b-984f-e0737ba95a1c.png[/img]

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

7.最后:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值