开篇语
因工作内容需要做一个windows服务,此前并没有相关经验,所以做了一个demo来跑跑这个梗(高手跳过,需要的来踩)~
效果如下:打开服务,可以找到我们新增的一个windows服务,这个demo是定时向一个txt文件输出一句话
生成的以日期命名的txt文件
打开文件结果如下:
全过程梳理
本文将只粗略简单的介绍一下windows服务是如何开发和安装的
一、创建windows服务
如图新建一个Windows服务
进入程序如图
空白服务如下
1 public partial class Service1 : ServiceBase 2 { 3 System.Threading.Timer recordTimer; 4 5 6 public Service1() 7 { 8 InitializeComponent(); 9 } 10 11 12 protected override void OnStart(string[] args) 13 { 14 } 15 16 17 protected override void OnStop() 18 { 19 } 20 }
只要在OnStart里完成你的功能代码即可。本例中我们做一个定时向本地文件写记录的功能。
创建一个类,用户写文件
1 /// <summary> 2 /// 保存至本地文件 3 /// </summary> 4 /// <param name="ETMID"></param> 5 /// <param name="content"></param> 6 public static void SaveRecord(string content) 7 { 8 if (string.IsNullOrEmpty(content)) 9 { 10 return; 11 } 12 FileStream fileStream = null; 13 StreamWriter streamWriter = null; 14 try 15 { 16 string path = Path.Combine(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase, string.Format("{0:yyyyMMdd}", DateTime.Now)); 17 18 19 using (fileStream = new FileStream(path, FileMode.Append, FileAccess.Write)) 20 { 21 using (streamWriter = new StreamWriter(fileStream)) 22 { 23 streamWriter.Write(content); 24 25 26 if (streamWriter != null) 27 { 28 streamWriter.Close(); 29 } 30 } 31 32 if (fileStream != null) 33 { 34 fileStream.Close(); 35 } 36 } 37 } 38 catch { } 39 }
如图那么在Service1中调用
1 public partial class Service1 : ServiceBase 2 { 3 System.Threading.Timer recordTimer; 4 public Service1() 5 { 6 InitializeComponent(); 7 } 8 9 protected override void OnStart(string[] args) 10 { 11 IntialSaveRecord(); 12 } 13 /// <summary> 14 /// 定时检查,并执行方法 15 /// </summary> 16 /// <param name="source"></param> 17 /// <param name="e"></param> 18 private void IntialSaveRecord() 19 { 20 TimerCallback timerCallback = new TimerCallback(CallbackTask); 21 22 AutoResetEvent autoEvent = new AutoResetEvent(false); 23 recordTimer = new System.Threading.Timer(timerCallback, autoEvent, 0, 10000);//其中参数10000表示延时执行服务的时间间隔,毫秒为单位 24 } 25 //方法 26 private void CallbackTask(Object stateInfo) 27 { 28 Show_Java.SaveRecord(string.Format(@"当前记录时间:{0},状况:程序运行正常!", DateTime.Now)); 29 } 30 31 protected override void OnStop() 32 { 33 if (recordTimer != null) 34 { 35 recordTimer.Dispose(); 36 } 37 } 38 }
安装程序
这样服务算是写的差不多了,下面添加一个安装程序,用于安装服务。
如图,在service1页面空白处右键-添加安装程序
添加一个安装程序,如图,添加完成后
设置相应的属性,给serviceInstaller1设置属性,主要是描述信息。如图,
给serviceProcessInstaller1设置,主要是account。一般选localsystem,如图
这样服务已经写好了。那么如何添加到windows服务里面去呢。这里推荐一种简单实用的方法(也可以通过代码来安装,这里就不做过多讲解了)
安装服务
上面写好的服务,最终生成的是一个exe文件。如图,
安装程序安装时需要用到这个exe的路径,所以方便起见,将这个生成的exe文件拷贝至安装程序的运行目录下。(这里我将exe拷贝到D盘shows文件夹下面)
用管理员权限打开cmd窗口
然后分别执行
@SET FrameworkDir=%WINDIR%\Microsoft.NET\Framework
@SET FrameworkVersion=v2.0.50727
@SET PATH=%FrameworkDir%\%FrameworkVersion%;%WINDIR%\System32;%PATH%;
InstallUtil.exe D:\路径\程序名称.exe //安装服务
InstallUtil.exe /u D:\路径\程序名称.exe //卸载服务(程序安装好了,如果想要修改,需要先卸载该服务,再次执行安装)
运行后若无错误,效果应该如下
运行完后在服务中查看,如图:
再在安装目录下看记录的文件(因为我们设置项目的时候选的是手动,此时要记住启动该服务,程序才会定时执行)
这样,一个windows服务算是安装成功了。(方法多种多样,希望各位多提宝贵意见,不胜感激~)
- 感谢你的阅读。如果你觉得这篇文章对你有帮助或者有启发,就请推荐一下吧~你的精神支持是博主强大的写作动力。欢迎转载!
- 博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高(其实是个菜B),不足和错误之处在所难免,希望大家能够批评指出。
- 欢迎加入.NET 从入门到精通技术讨论群→523490820 期待你的加入
- 不舍得打乱,就永远学不会复原。被人嘲笑的梦想,才更有实现的价值。
- 我的博客:http://www.cnblogs.com/zhangxiaoyong/