Window Service 创建:在后台执行一个服务,可定时做一些操作,如轮询数据库,定时发邮件


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。它没有用户界面,并且也不会产生任何可视输出。任何用户消息都会被写进Windows事件日志。计算机启动时,服务会自动开始运行。它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环境下运行。通过服务控制管理器,Windows服务是可控的,可以终止、暂停及当需要时启动。
注:因任何消息都会写到windows事件日志,故当服务启动不了的时候如:“服务启动后又停止了。一些服务自动停止 如果它们没有什么可做的”这种问题出现时,可打开控制面板-管理工具-事件查看器:查看应用程序的日志
2,创建方法:
1. 新建一个项目 从一个可用的项目模板列表当中选择Windows服务
? OnStart ? 控制服务启动执行的代码 ? OnStop ? 控制服务停止执行的代码

2,添加安装程序
1. 将这个服务程序切换到设计视图
2. 右击设计视图选择“添加安装程序”
3. 切换到刚被添加的ProjectInstaller的设计视图
4. 设置serviceInstaller1组件的属性:
1) ServiceName = My Sample Service
2) StartType = Automatic
5. 设置serviceProcessInstaller1组件的属性
1) Account = LocalSystem
NetworkService 在当前正使用 NetworkService 帐户运行的提供程序宿主进程中激活提供程序。
LocalService 在当前正使用 LocalService 帐户运行的提供程序宿主进程中激活提供程序。
LocalSystem 在当前正使用 LocalSystem 帐户运行的提供程序宿主进程中激活提供程序。
6. 生成解决方案

3,安装
1, 打开Visual Studio .NET命令提示
2. 改变路径到你项目所在的bin\Debug文件夹位置(如果你以Release模式编译则在bin\Release文件夹)
3. 执行命令“InstallUtil.exe MyWindowsService.exe”注册这个服务,使它建立一个合适的注册项。
或在.net framework的C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 执行:installutil 服务程序路径+文件名.exe
4, 卸载用:installutil /u 服务程序路径+文件名.exe

4,调试: 服务不能象普通应用程序那样,只要简单地在开发环境下执行就可以调试了。服务必须首先被安装和启动.
1. 安装服务并启动, 设置程序断点
2. 点击“调试”菜单
3. 点击“进程”菜单
4. 确保 显示系统进程 被选
5. 在 可用进程 列表中,把进程定位于你的可执行文件名称上点击选中它
6. 点击 附加 按钮
7. 点击 确定

注:在第5步时若服务为灰色,附件上到….选择中:调试以下代码类型!

3, 定时器使用
1,命名空间 System.Timers; Timer _timer = new Timer();
2,方法及属性
AutoReset 获取或设置一个值,该值指示 Timer 是应在每次指定的间隔结束时引发 Elapsed 事件,还是仅在指定的间隔第一次结束后引发该事件。true时Elapsed定时执行,false执行一次停止
Enabled 获取或设置一个值,该值指示 Timer 是否应引发 Elapsed 事件。
Interval 获取或设置引发 Elapsed 事件的间隔。
定时事件:_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
private void OnTimedEvent(object source, ElapsedEventArgs e) { }

(2)控件添加

4,实例:定时插入文本

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.IO;
using System.Timers;

namespace MyServices
{

public partial class Service1 : ServiceBase
{
string filePath = “F:\\temp.txt”;
static int i = 0;
Timer _timer = new Timer();
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_timer.AutoReset = true;
_timer.Interval = 2000;
_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
_timer.Start();

}
private void OnTimedEvent(object source, ElapsedEventArgs e) {

Stream fs = File.OpenWrite(filePath);
TextWriter sw = new StreamWriter(fs);
i++;
sw.WriteLine(i.ToString() + “, hi, this is my first Services”);
sw.Flush();
sw.Close();
}
protected override void OnStop()
{
Stream fs = File.OpenWrite(filePath);
TextWriter sw = new StreamWriter(fs);
sw.WriteLine(“panel !!!!!!!!!!!!!!!”);
sw.Flush();
sw.Close();
}

}
}