博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#创建windows服务并发布
阅读量:5154 次
发布时间:2019-06-13

本文共 2595 字,大约阅读时间需要 8 分钟。

 

创建window 服务

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

 

 

切换到代码视图修改.

[csharp] 
 
 
  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

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

转载于:https://www.cnblogs.com/taleche/p/9662433.html

你可能感兴趣的文章
Ural 1297 Palindrome(后缀数组+最长回文子串)
查看>>
了解java虚拟机—非堆相关参数设置(4)
查看>>
mysql find_in_set
查看>>
数组的去重-----------------------来自大牛的讲解
查看>>
NSAttributedString
查看>>
Java复习之网络编程
查看>>
C#与vb6 com组件的互相调用方法
查看>>
对象-关系映射ORM(Object Relational Mapping)(转)
查看>>
ISP DSP的不同
查看>>
深入Linux grep指令的详解(实用型)
查看>>
嵌入式根文件系统的移植和制作详解
查看>>
单片机定时器中断原理
查看>>
Ignite 配置更新Oracle JDBC Drive
查看>>
partproble在RHEL 6下无法更新分区信息
查看>>
c网购物车流程图
查看>>
xapth(笔记)
查看>>
HTTP 错误 403.6 - Forbidden 解决方案
查看>>
一个小例子介绍Obj-C的函数命名方式
查看>>
关于Bootstrap的理解
查看>>
十种基本排序算法
查看>>