最近工作中用到了windows服务,对其有深刻理解和丰富经验谈不上,本篇文章只是简单陈诉了我工作中用c#创建、安装、卸载、调试windows服务的步骤。
一、创建windows服务
1、用VS创建windows服务,结果如下:
2、删除默认生成的Service1.cs文件,然后创建自己的服务文件(如:MyService),并修改Program.cs文件的代码,如下:
此时,解决方案的目录结构如下:
3、双击MyService.cs服务文件,在左侧设计模式中,右键,点击“添加安装程序”,自动会生成Projectinstaller.cs文件以及两个安装组件,如下:
4、右键”ServiceProcessInstaller1“,选择属性,设置Account 帐号方式,建议为LocalService,如下:
5、右键”ServiceInstaller1“,选择属性,设置属性
a.Description 服务描述,直接显示到Windows服务列表中的描述;
b.DisplayName 服务显示名称,直接显示到Windows服务列表中的名称;
c.ServiceName 服务进程名称,安装与卸载服务时的唯一标识.
如下:
6、创建安装服务批处理文件Install.bat,可以创建记事本,然后修改后缀为bat,记事本内容如下:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsServiceDemo.exe
Net Start MyService
sc config MyService start= auto
pause
记事本另存为时设置编码为ANSI,如下图:
7、同理创建创建卸载服务批处理文件Uninstall.bat,内容如下:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceDemo.exe
pause
此时解决方案的目录结构如下:
二、写服务代码
右键”MyService.cs“,选择查看代码,如下:
namespace WindowsServiceDemo { partial class MyService : ServiceBase { public MyService() { InitializeComponent(); } protected override void OnStart(string[] args) { // TODO: 在此处添加代码以启动服务。 } protected override void OnStop() { // TODO: 在此处添加代码以执行停止服务所需的关闭操作。 } } }
下面实现自己的简单功能,代码如下:
using System; using System.Diagnostics; using System.IO; using System.ServiceProcess; using System.Timers; namespace WindowsServiceDemo { partial class MyService : ServiceBase { private Timer time = new Timer(); public MyService() { InitializeComponent(); } protected override void OnStart(string[] args) { WriteLog("服务启动,时间:"+DateTime.Now.ToString("HH:mm:ss") + "\r\n"); time.Elapsed += new System.Timers.ElapsedEventHandler(MethodEvent); time.Interval = 2 * 1000;//时间间隔为2分钟 time.Start(); } protected override void OnStop() { WriteLog("服务停止,时间:" + DateTime.Now.ToString("HH:mm:ss") + "\r\n"); } private void MethodEvent(object source, System.Timers.ElapsedEventArgs e) { time.Enabled = false; Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); string result = string.Empty; string startTime = DateTime.Now.ToString("HH:mm:ss"); try { //......... result = "执行成功,时间为:"+ startTime; } catch (Exception exp) { result = "失败,原因:" + exp.Message; } finally { stopWatch.Stop(); WriteLog(result); time.Enabled = true; } } /// <summary> /// 日志记录 /// </summary> /// <param name="logInfo"></param> public void WriteLog(string logInfo) { try { string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\Logs"; if (!Directory.Exists(logDirectory)) { Directory.CreateDirectory(logDirectory); } string filePath = logDirectory + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt"; File.AppendAllText(filePath, logInfo); } catch { } } } }
具体功能是2分钟执行一次,并记录日志。
原文:http://www.cnblogs.com/qk2014/p/4869675.html