用C#建立Windows Servicewindows
如今的.NET框架已经为Windows service的开发提供足够强大的支持,你只须要关注service所要实现的逻辑,而彻底不用关心service底层是如何实现的,相比之前用MFC来讲,真是质的飞跃啊。闲话少谈,看看如何实现一个最基本的windows service,以及如何来调试windows service。
打开VS 2005,点击File->New->Project….,在建立工程向导中选择Windows service模板,在工程名输入框中,输入TestService而后点击OK。VS为咱们生成了最基本的代码,咱们将Service的名称改成咱们指望的名称,在solution explorer中右键点击vs自动生成的service文件“Service1.cs”,在弹出的菜单中选择Rename,输入“MyFirstService”,而后切换到设计视图,也就是在solution explorer中双击MyfirstService.cs,在Property Explorer中将ServiceName属性改成MyFirstService,这时一个可运行的windows service已经建立成功。咱们添加一些代码来测试一下这个service,最简单的测试方式就是向windows event log里来添加一些消息以显示咱们的Service的状态。
咱们须要一个EventLog组件向windows log中添加信息,在solution explorer中双击MyfirstSerice文件切换到设计视图,将工具箱中的EventLog组件拖到设计视图中,咱们保留EventLog组件的默认名称eventLog1。选中eventLog1,在property explorer中将Log属性选为Application,在Source属性中输入“MyFirstService”。接下来,咱们在设计视图的空白处,右键点击,并选择View Code切换到代码视图,在OnStart和OnStop方法里输入代码实现日志写入,代码以下:
框架
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;ide
namespace TestService
{
public partial class MyFirstService : ServiceBase
{
public MyFirstService()
{
InitializeComponent();
}工具
protected override void OnStart(string[] args)
{
// TODO: Add code here to start your service.
eventLog1.WriteEntry("Service start");
}性能
protected override void OnStop()
{
// TODO: Add code here to perform any tear-down necessary to stop your service.
eventLog1.WriteEntry("Service stop");
}
}
}
要运行这个service咱们还要作下边的几个步骤:
1.为咱们的Service添加Installer,右键点击设计视图,选择Add Installer,VS将会为咱们添加ProjectInstaller.cs,并在ProjectInstaller中添加组件serviceInstaller1和serviceProcessInstaller1,如今咱们来修改他们的属性来控制Service的安装和启动选项。在ProjectInstaller得设计视图中选中serviceProcessInstaller1,将它得Account属性选为LocalSystem,这样以这个账号服务启动。若是你但愿系统启动时自动启动服务得话,将serviceInstaller1的StartType的属性选为Automatic,若是手动启动的话,选为manaul。
2.安装service,咱们要用到IntallUtil.exe这个程序,这个程序位于C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727。点击开始菜单,选择“运行”,在运行对话框中输入cmd,进入到命令行窗口,输入cd c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727,进入到这个目录,而后输入installutil F:\Programs\C#\TestService\TestService\bin\Debug\testserveice.exe, installutil后边的内容就是咱们的工程生成的可执行程序的路径,情根据须要修改。
若是你给ServiceInstaller1的StartType设为Automatic的话,安装完服务,服务已经运行起来了,若是StartType是Manual的话,你须要手动启动。如今咱们进入“服务”,要打开“服务”,请单击“开始”,指向“设置”,而后单击“控制面板”。依次单击“性能和维护”、“管理工具”,而后双击“服务”。在里边你应该可以看到咱们制做的Service MyFirstService。在这里边,咱们能够启动,关闭服务,还能够设置服务的启动类型。而后,咱们看看服务有没有正确的写入日志,咱们须要进入到事件查看器,要打开“事件查看器”,请单击“开始”,指向“设置”,而后单击“控制面板”。单击“性能和维护”,单击“管理工具”,而后双击“事件查看器”。以下图所示,咱们的消息已经成功的写到了系统日志里了。
若是你不须要这个Service了,仍然使用InstallUtil这个程序来卸载,不过在InstallUtil后跟参数 –u,好比installutil –u F:\Programs\C#\TestService\TestService\bin\Debug\testserveice.exe。
Service的调试方法与普通的程序调试方法是不同的。我来介绍一下。
1. Build你的项目
2. 设置断点,由于咱们的Service很是的简单,没有什么执行逻辑,因此设置断点没有任何意义,你们能够本身写一些代码来实践。通常来讲,咱们服务里须要用到一个另外的线程来执行任务,你须要在线程的执行代码中来设置断点。
3. 安装service,咱们前边有介绍如何安装。
4. 若是你的Service启动类型是手动(Manual),你须要到“服务”里启动你的Service。通常来讲,若是你的service在开发阶段,我推荐你将Service的启动类型设置为Manual,这样便于调试,由于若是service在运行过程当中,你将没法build工程。
5. 测试