创建window 服务

新建一个window 服务项目MyService,如下图

 

 

切换到代码视图修改.

[csharp] view plaincopy
 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Diagnostics;  
  6. using System.IO;  
  7. using System.Linq;  
  8. using System.ServiceProcess;  
  9. using System.Text;  
  10. using System.Threading.Tasks;  
  11.   
  12. namespace MyService  
  13. {  
  14.     public partial class Service1 : ServiceBase  
  15.     {  
  16.         //定时器  
  17.         System.Timers.Timer t = null;  
  18.   
  19.   
  20.         public Service1()  
  21.         {  
  22.             InitializeComponent();  
  23.   
  24.             //启用暂停恢复  
  25.             base.CanPauseAndContinue = true;  
  26.   
  27.             //每5秒执行一次  
  28.             t = new System.Timers.Timer(5000);  
  29.             //设置是执行一次(false)还是一直执行(true);  
  30.             t.AutoReset = true;  
  31.             //是否执行System.Timers.Timer.Elapsed事件;  
  32.             t.Enabled = true;  
  33.             //到达时间的时候执行事件(theout方法);  
  34.             t.Elapsed += new System.Timers.ElapsedEventHandler(theout);  
  35.               
  36.         }  
  37.   
  38.         //启动服务执行  
  39.         protected override void OnStart(string[] args)  
  40.         {  
  41.             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "启动";  
  42.             WriteLog(state);  
  43.   
  44.         }  
  45.   
  46.         //停止服务执行  
  47.         protected override void OnStop()  
  48.         {  
  49.             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";  
  50.             WriteLog(state);  
  51.         }  
  52.   
  53.         //恢复服务执行  
  54.         protected override void OnContinue()  
  55.         {  
  56.             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "继续";  
  57.             WriteLog(state);  
  58.             t.Start();  
  59.         }  
  60.   
  61.         //暂停服务执行  
  62.         protected override void OnPause()  
  63.         {  
  64.             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "暂停";  
  65.             WriteLog(state);  
  66.   
  67.             t.Stop();  
  68.         }  
  69.   
  70.   
  71.         public void WriteLog(string str)  
  72.         {  
  73.             using (StreamWriter sw = File.AppendText(@"d:\service.txt"))  
  74.             {  
  75.                 sw.WriteLine(str);  
  76.                 sw.Flush();  
  77.             }  
  78.         }  
  79.   
  80.         public void theout(object source, System.Timers.ElapsedEventArgs e)  
  81.         {  
  82.   
  83.             WriteLog("theout:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));  
  84.         }  
  85.     }  
  86. }  


 

解释:OnStart和OnStop分别是服务器启动和停止后,所发生的事件操作方法.定义了一个定时器,每隔5秒执行一次(theout方法),因为暂停恢复功能默认是不启用的,需要设置CanPauseAndContinue属性启用此功能,同时重写OnStop和OnContinue方法,添加自己的逻辑代码.

 

 

将服务程序service1.cs 切换到视图模式,用鼠标右键单击设计视图选择“添加安装程序”选项,此后在项目中自动增加了一个ProjectInstaller.cs,

如下图

打开ProjectInstaller,修改serviceInstaller1组件属性

 

Description= 我的服务备注                       服务备注说明

DisplayName=我的服务                            服务友好名字 

ServiceName=MyService                         安装服务器名字

StartType=Automatic                                服务类型

ü         Manual      服务安装后,必须手动启动。

ü         Automatic    每次计算机重新启动时,服务都会自动启动。

ü         Disabled     服务无法启动。

 

 

并设计serviceProcessInstaller1的属性Account=LocalSystem

 

运行编译,一个简单的windows服务已经开发完成.

 

 

安装window服务

安装命令:InstallUtil.exe MyServiceLog.exe

InstallUtil存在路径为:C:\WINDOWS\Microsoft.NET\Framework\.NET版本号

复制C:\WINDOWS\Microsoft.NET\Framework\版本号  路径中的InstallUtil.exe 到bin/debug或bin/release文件夹中,在命令行窗口中直接运行命令

InstallUtil.exe MyServiceLog.exe,在系统中注册这个服务,使它建立一个合适的注册项,如下图:

 

 

 

然后再window服务列表中,启动MyServiceLog服务

卸载window 服务

命令:InstallUtil.exe MyServiceLog.exe /u

如果修改这个服务,但是路径没有变化的话是不需要重新注册服务的,直接停止服务,然后用新的文件覆盖原来的文件即可,如果路径发生变化,应该先卸载这个服务,然后重新安装这个服务。

posted on 2018-09-17 15:29  车车12138  阅读(264)  评论(0编辑  收藏  举报