创建第一个windows服务
windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志。
计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行。
可以通过选择菜单“开始”-〉“控制面板”-〉“管理工具”-〉“服务”来查看现有系统中的服务,如下图:

创建一个windows服务

切换到代码视图修改.
using System;
using System.IO;
using System.ServiceProcess; namespace WindowsServiceTest
{
public partial class hjpServiceTest : ServiceBase
{
//定时器
System.Timers.Timer t = null; public hjpServiceTest()
{
InitializeComponent(); //启用暂停恢复
base.CanPauseAndContinue = true; //每5秒执行一次
t = new System.Timers.Timer();
//设置是执行一次(false)还是一直执行(true);
t.AutoReset = true;
//是否执行System.Timers.Timer.Elapsed事件;
t.Enabled = true;
//到达时间的时候执行事件(theout方法);
t.Elapsed += new System.Timers.ElapsedEventHandler(theout);
} //启动服务执行
protected override void OnStart(string[] args)
{
string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "启动";
WriteLog(state);
} //停止服务执行
protected override void OnStop()
{
string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";
WriteLog(state);
} //恢复服务执行
protected override void OnContinue()
{
string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "继续";
WriteLog(state);
t.Start();
} //暂停服务执行
protected override void OnPause()
{
string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "暂停";
WriteLog(state);
t.Stop();
} public void WriteLog(string str)
{
using (StreamWriter sw = File.AppendText(@"d:\service.txt"))
{
sw.WriteLine(str);
sw.Flush();
}
} public void theout(object source, System.Timers.ElapsedEventArgs e)
{
WriteLog("theout:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
}
}
}
解释:OnStart和OnStop分别是服务器启动和停止后,所发生的事件操作方法.定义了一个定时器,每隔5秒执行一次(theout方法),因为暂停恢复功能默认是不启用的,需要设置CanPauseAndContinue属性启用此功能,同时重写OnStop和OnContinue方法,添加自己的逻辑代码.
将服务程序hjpServiceTest.cs 切换到视图模式,用鼠标右键单击设计视图选择“添加安装程序”选项,此后在项目中自动增加了一个ProjectInstaller.cs,
如下图

打开ProjectInstaller,修改serviceInstaller1组件属性
Description= 我的服务备注 服务备注说明
DisplayName=我的服务 服务友好名字
ServiceName=hjpServiceTest 安装服务器名字
StartType=Automatic 服务类型
ü Manual 服务安装后,必须手动启动。
ü Automatic 每次计算机重新启动时,服务都会自动启动。
ü Disabled 服务无法启动。
并设计serviceProcessInstaller1的属性Account=LocalSystem
运行编译,一个简单的windows服务已经开发完成.
安装window服务
安装命令:InstallUtil.exe WindowsServiceTest.exe
InstallUtil存在路径为:C:\WINDOWS\Microsoft.NET\Framework\.NET版本号
复制C:\WINDOWS\Microsoft.Net\Framework\版本号 路径中的InstallUtil.exe 到bin/debug或bin/release文件夹中,在命令行窗口中直接运行命令
InstallUtil.exe WindowsServiceTest.exe,在系统中注册这个服务,使它建立一个合适的注册项,如下图:

然后再window服务列表中,启动hjpServiceTest服务
卸载window 服务
命令:InstallUtil.exe WindowsServiceTest.exe /u
如果修改这个服务,但是路径没有变化的话是不需要重新注册服务的,直接停止服务,然后用新的文件覆盖原来的文件即可,如果路径发生变化,应该先卸载这个服务,然后重新安装这个服务。
------------------------------------------------------------------------------------------------------
Window服务应用程序体系结构
.net framework对windows服务提供了更多的支持,在命名空间System.ServiceProcess下.
包括类如下:
ServiceBase 所有Window服务的基类
ServiceController 该类的一个实例代表一个具体的windows服务
ServiceControllerPermission 用于控制ServiceController的使用权限
ServiceInstaller 用于执行对windows服务的安装
ServiceProcessInstaller 用于执行对windows服务的安装,与上类的不同的是,该类可以代表一个可以执行的windows服务的进程.
ServiceBase类
ServiceBase方法:
| 
 方法  | 
 描述  | 
| 
 Run()  | 
 运行一个windows服务  | 
| 
 OnContinue()  | 
 继续执行服务  | 
| 
 OnCustomCommand()  | 
 向windows服务发出自定指令  | 
| 
 OnPause()  | 
 暂停正在运行的windows服务  | 
| 
 OnPowerEvent()  | 
 当计算机的电源状态改变是调用  | 
| 
 OnShutDown()  | 
 当系统关闭条用OnStart()开始一个windows服务  | 
| 
 OnStop()  | 
 结束一个windows服务  | 
ServiceBase属性:
| 
 属性  | 
 描述  | 
| 
 AutoLog  | 
 表示是否将开始,结束,暂停,继续等指令写入事件日志  | 
| 
 CanHandlePowerEvent  | 
 表示该服务是否支持电源事件  | 
| 
 CanPauseAndContinue  | 
 表示该服务是否支持暂停和继续功能  | 
| 
 CanShutDown  | 
 表示该服务是否支持关闭功能  | 
| 
 CanStop  | 
 表示该服务是否支持结构功能  | 
| 
 EventLog  | 
 应用程序的时间日志  | 
| 
 ServiceName  | 
 该服务名称  | 
ServiceController类
服务控制类,用于控制windows服务的各种具体行为,它既可以控制本地的windows服务,有可以控制远程的windows服务。
ServiceControler的方法:
| 
 方法  | 
 描述  | 
| 
 GetDivices()  | 
 得到一台计算机上设备驱动器服务  | 
| 
 GetServices()  | 
 得到一台计算上的非设备驱动器服务  | 
| 
 Close()  | 
 用于断开服务连接,并且释放服务控制器所占用的资源  | 
| 
 Continue()  | 
 继续被暂停的服务  | 
| 
 ExcuteCommand()  | 
 对服务执行一条自定义命令  | 
| 
 Pause()  | 
 暂停服务  | 
| 
 Refresh()  | 
 对所有属性更新  | 
| 
 Start()  | 
 启动服务  | 
| 
 Stop()  | 
 停止服务  | 
| 
 WaitForStatus()  | 
 等待服务到达指定的状态  | 
ServiceController属性
| 属性 | 描述 | 
| CanPauseAndContinue | 表示服务是否可以停止 | 
| CanShutDown | 表示服务在系统关闭时是否可以得到通知,CanStop表示服务器是否可以被停止 | 
| DependentServices | 表示与服务相关联的设备 | 
| DisplayName | 表示服务控制器所绑定的名称 | 
| MachineName | 表示服务所在的计算机名称 | 
| ServiceName | 表示绑定的服务名称 | 
| ServiceType | 表示控制器所引用的服务类型 | 
| ServicesDependedOn | 表示服务所依赖ude服务集合Status表示控制器所引用的服务状态 | 
ServiceInstaller类
ServiceInstaller的属性
| 属性 | 描述 | 
| DisplayName | 显示名称 | 
| ServiceName | 表示服务名称,这个名称必须与Installer将要安装的windows服务名称相同 | 
| ServiceDependOn | 服务所要用到的其服务名称的一个数组 | 
| StartType | 表示所安装服务的启动特性,可以为Automatic,Manual或Disable,默认为Manual | 
| 方法 | 事件 | 
| AfterInstaller() | 调用Install方法后发生 | 
| AfterRollback() | 调用Rollback后发生 | 
| AfterUninstall() | 调用Uninstall方法后发生 | 
| BeforeInstall() | 调用Install方法前发生 | 
| BeforeRollback() | 调用Rollback方法前发生 | 
| BeforeUninstall() | 调用Uninstall方法前发生 | 
| Committed() | 调用Commit方法后发生 | 
| Committing() | 调用Commit方法前发生 | 
ServiceProcessInstaller类
用于安装ServiceBase继承的windows服务,它与一个可执行程序中的所有服务所做基本工作相同
ServiceProcessInstaller属性
| 属性 | 描述 | 
| Account | 运行服务的当前用户账号 | 
| HelpText | 在服务安装选项中给出的帮助信息 | 
| Password | 运行服务的当前账号密码 | 
| UserName | 运行服务的当前账号用户名 | 
------------------------------------------------------------------------------------------------------------------------
Windows服务调试
vs打开MySerivceLog项目
在管理工具-〉服务里面启动MyServiceLog服务
单击vs的调试 -〉附加到进程,如下图
在"可用进程“列表中,选中你要调式的服务的可执行文件名
单击 ”附加“按钮,即可进入调试状态
在timer1_Elapsed方法里设置一个断点,然后等它执行,服务执行到该处时候会自动启动断点。
创建第一个windows服务的更多相关文章
- tomcat创建一个windows服务
		
具体步骤如下: 1.把JDK解压到C:\Program Files\Java下,Tomcat解压到D:\tomcat下 2.配置环境变量 JAVA_HOME:C:\Program Files\Java ...
 - 为MongoDB创建一个Windows服务
		
一:选型,根据机器的操作系统类型来选择合适的版本,使用下面的命令行查询机器的操作系统版本 wmic os get osarchitecture 二:下载并安装 附上下载链接 点击安装包,我这里是把文件 ...
 - C#创建、安装一个Windows服务
		
关于WIndows服务的介绍,之前写过一篇: http://blog.csdn.net/yysyangyangyangshan/article/details/7295739.可能这里对如何写一个服务 ...
 - 写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我
		
写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我 1.HttpUtil工具类,用于模拟用户登录以及爬取网页: using System; using ...
 - WCF学习系列一_创建第一个WCF服务
		
原创作者:灰灰虫的家http://hi.baidu.com/grayworm WCF开发实战系列一:创建第一个WCF服务 在这个实战中我们将使用DataContract,ServiceContract ...
 - WCF开发实战系列一:创建第一个WCF服务
		
WCF开发实战系列一:创建第一个WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 在这个实战中我们将使用DataContract,ServiceContract ...
 - [翻译] 使用 .NET Core 3.0 创建一个 Windows 服务
		
原文: .NET Core Workers as Windows Services 在 .NET Core 3.0 中,我们引入了一种名为 Worker Service 的新型应用程序模板.此模板旨在 ...
 - 创建寄宿在Windows服务中的WCF服务
		
1.创建Windows服务项目 2.Server1改名为你想要的名称,比如WinServer 3.在项目中新建一个WCF文件夹,用于存放wcf服务文件. 注:在WcfServer类的上面还要添加 [S ...
 - .net创建并安装windows服务案例
		
1. 创建windows服务[引用博文]: 1. 将这个服务程序切换到设计视图2. 右击设计视图选择“添加安装程序”3. 切换到刚被添加的ProjectInstaller的设计视图4. 设置servi ...
 
随机推荐
- js高级程序设计 笔记 --- DOM
			
DOM是针对HTML和XML文档的一个API.DOM描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分. 1,节点层次 DOM可以将任何HTML或XML文档描绘成一个由多层节点构成的 ...
 - Q806 写字符串需要的行数
			
我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行.我们给定了一个数组 width ...
 - maven相关的说明以及通过它来创建项目
			
1.什么是maven maven的本质是一个项目构建工具 2.maven的作用 那么作为一个项目构建工具我们又为什么要使用它以及好处呢 首先项目构建的本质是什么:项目代码从源代码到程序文件的过程是代码 ...
 - dsad
			
dasdas dasdas dasdas dasdas
 - J15W-J45W铜质截止阀厂家,J15W-J45W铜质截止阀价格 - 专题栏目 - 无极资讯网
			
无极资讯网 首页 最新资讯 最新图集 最新标签 搜索 J15W-J45W铜质截止阀 无极资讯网精心为您挑选了(J15W-J45W铜质截止阀)信息,其中包含了(J15W-J45W铜质截止阀)厂家,( ...
 - 解决GitHub下载很慢的问题
			
此方法参照 github下载慢,轻松提速教程 1.获取github的IP地址.访问:https://www.ipaddress.com/ 网址依次获取以下三个网址的IP github.com gith ...
 - vue与TypeScript集成配置最简教程
			
https://blog.csdn.net/u014633852/article/details/73706459 https://segmentfault.com/a/119000001187808 ...
 - Python学习--猫眼电影TOP100榜单抓取
			
import requests import re import json import time def get_one_page(url): headers={'User-Agent':'Mozi ...
 - selenium+Python(处理html5的视频播放)
			
Webdriver支持在指定的浏览器测试HTML5,另外可以用JavaScript来测试这些功能,这样就可以在任何浏览器上测试HTML5 多数浏览器使用控件来播放视频,但是不同浏览器需要使用不同的插件 ...
 - 【LESS系列】一些常用的Mixins
			
在我们平时的开发中,对于一些使用频率很高的方法函数,我们一般都会将其归纳到一起,整理出一个核心库来. 其实这个思想,借助 LESS 也可以在 CSS 中得以实现. 下面是几个在 W3CPLUS 中偷过 ...