如何用C#创建Windows Service

.Net中用C#创建Windows Service,其实很简单,按照以下的步骤就可以做出一个简单的Windows Service

1.首先在创建工程的时候选择Windows Service,这样.Net会自动生成Windows Service的框架;

2.完成Windows Service的相应事件,主要是OnStartOnStop这两个事件,完成后大致代码如下:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.ServiceProcess;

using System.IO;

using System.Threading;

namespace WinSDemo

{

public class WinSDemo : System.ServiceProcess.ServiceBase

{

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.Container components = null;

private bool blnStopThread;

private Thread thdMain;

public WinSDemo()

{

// This call is required by the Windows.Forms Component Designer.

InitializeComponent();

// TODO: Add any initialization after the InitComponent call

}

// The main entry point for the process

static void Main()

{

System.ServiceProcess.ServiceBase[] ServicesToRun;

// More than one user Service may run within the same process. To add

// another service to this process, change the following line to

// create a second service object. For example,

//

ServicesToRun = new System.ServiceProcess.ServiceBase[] { new WinSDemo() };

System.ServiceProcess.ServiceBase.Run(ServicesToRun);

}

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

//

// WinSDemo

//

this.CanPauseAndContinue = true;

this.ServiceName = "MyTest";

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

/// <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.

thdMain=new Thread(new ThreadStart(WriteLog));

thdMain.Start();

}

/// <summary>

/// Stop this service.

/// </summary>

protected override void OnStop()

{

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

blnStopThread=true;

thdMain.Join();

}

protected override void OnPause()

{

thdMain.Suspend();

}

protected override void OnContinue()

{

thdMain.Resume();

}

protected void WriteLog()

{

StreamWriter myWriter=null;

do

{

Process.Start("net","send localhost yourValue");

try

{

myWriter=new StreamWriter("c://MyLog.txt",true);

myWriter.WriteLine(DateTime.Now.ToString());

myWriter.Close();

}

catch{};

Thread.Sleep(5000);

}while(blnStopThread==false);

}

}

}

注:为了使自己能更好的识别自己写的Windows Service,建议在InitializeComponent修改Service的名称。

3.为了使自己写的Service能加载到系统中去,光靠以上步骤是不够;接下来,向当前的工程添加Service Installer,在其中设置Service安装后的起始状态,代码如下:

using System;

using System.Collections;

using System.ComponentModel;

using System.Configuration.Install;

using System.ServiceProcess;

namespace WinSDemo

{

/// <summary>

/// Summary description for WinSDemoIns.

/// </summary>

[RunInstaller(true)]

public class WinSDemoIns : System.Configuration.Install.Installer

{

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.Container components = null;

private ServiceInstaller serviceInstaller;

private ServiceProcessInstaller processInstaller;

public WinSDemoIns()

{

// This call is required by the Designer.

InitializeComponent();

// TODO: Add any initialization after the InitComponent call

processInstaller = new ServiceProcessInstaller();

serviceInstaller = new ServiceInstaller();

// Service will run under system account

processInstaller.Account = ServiceAccount.LocalSystem;

// Service will have Start Type of Manual

serviceInstaller.StartType = ServiceStartMode.Automatic;

serviceInstaller.ServiceName = "MyTest";

Installers.Add(serviceInstaller);

Installers.Add(processInstaller);

}

#region Component Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

components = new System.ComponentModel.Container();

}

#endregion

}

}

4.完成以上的步骤,代码的部分就完成了,编译成可执行文件,再用.NetService安装工具就行了,即在Dos窗口中,键入“installutil yourService.exe”,这样执行就可以了,相反,如果想卸载Service的话,加一个参数就可以了,即“installutil /u yourService.exe”。注意有可能.Net的路径在环境变量中不存在,可能直接执行是不能成功的,希望先找到“installutil.exe”存在的目录,大致在“/WINDOWS/Microsoft.NET/Framework/v1.1.4322”目录下。

至于以后Service的部署,由于.Net写的程序,运行环境必须要安装.Net Framework,所以在其他机器安装自己写的Service时候,一定要先安装.Net运行环境。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值