window 服务(一)

windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志。计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行。

可以通过选择菜单“开始”-〉“控制面板”-〉“管理工具”-〉“服务”来查看现有系统中的服务,如下图:

创建window 服务

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

从工具箱的组件表中拖动一个Timer对象到这个视图设计器上面。

设置Timer属性,Enable为true,Interval属性为3000毫秒

双击Timer事件,添加事件

后台代码

 1    public partial class Service1 : ServiceBase
 2     {
 3         public Service1()
 4         {
 5             InitializeComponent();
 6         }
 7
 8         protected override void OnStart(string[] args)
 9         {
10             // TODO: 在此处添加代码以启动服务。
11         }
12
13         protected override void OnStop()
14         {
15             // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
16         }
17
18         private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
19         {
20
21         }
22     }

 1  public partial class Service1 : ServiceBase
 2     {
 3         public Service1()
 4         {
 5             InitializeComponent();
 6         }
 7         protected override void OnStart(string[] args)
 8         {
 9             // TODO: 在此处添加代码以启动服务。
10             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "启动";
11             WriteLog(state);
12         }
13         protected override void OnStop()
14         {
15             // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
16             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";
17             WriteLog(state);
18         }
19         private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
20         {
21             WriteLog(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
22         }
23         public void WriteLog(string str)
24         {
25             using (StreamWriter sw = File.AppendText(@"c:\service.txt"))
26             {
27                 sw.WriteLine(str);
28                 sw.Flush();
29             }
30         }
31     }

其中OnStart和OnStop分别是服务器启动和停止后,所发生的事件操作方法,WriteLog是操作方法;

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

设置serviceInstaller1组件属性,

ServiceName=MyServiceLog安装服务器名字;

StartType=Automatic  开机自动启动

设计serviceProcessInstaller1的属性Account=LocalSystem;

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

注:如果在代码中的文件路径写成如下“service.txt”,那么此时文件保存在C:\WINDOWS\system32文件夹中。

安装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

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

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()


等待服务到达指定的状态

时间: 2025-01-12 06:44:26

window 服务(一)的相关文章

Window服务项目脚手架

本人最近工作用到window服务程序,于是尝试分享下经验,开源了一个window服务脚手架项目,把window服务程序必不可少的组件集成进去,如日志组件log4net,window服务挂在后台,用日志的方式监测程序运行状态是必不可少的.还有任务调度组件Quartz,window服务需要长时间运行,或定时运行,都是少不了它的. 同时本人将window服务的安装工具,和快捷安装脚本都提供了. 开源项目地址: https://coding.net/u/xuzimian/p/WindowServiceS

C# 编写短信发送Window服务

我们做项目过程中,一般都会有发送短信的需求.最常见的就是户注册或者登录时发送短信验证码.不同类型的短信发送,我们都可以放到到一张短信表中,然后通过一个定时的作业去执行短信发送.而定时作业的执行,我们就可以通过于Window服务去实现.(本篇只说window服务,具体实现短信发送的可以参考博客:http://www.cnblogs.com/ywl925/archive/2012/11/24/2786105.html) 1.首先我们创建一张短信内容表: 1 CREATE TABLE [dbo].[M

window服务创建

第一步:创建服务 第二步:在Service1.cs视图中 右键 选择”添加安装程序” 这里要注意几个细节 设置上面的属性 这两个分别有属性,具体网上查使用方式 3 实例代码编写 主要下面几个方法 protected override void OnStart(string[] args)        {                       timer.Interval = 1000 * 60*24;            timer.Elapsed += new System.Time

Window服务注册异常

在注册window服务时出现System.IO.FileNotFoundException: 未能加载文件或程序集“×××.exe”文件,或它的某个依赖项未能加载时,有可能是你的注册Microsoft.NET\Framework版本不一样, 当你的程序是在4.0下编译却用2.0去注册时就报此异常,解决方案:把C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe 版本改成 Microsoft.NET\Framework\v4.0

用python监控您的window服务

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://world77.blog.51cto.com/414605/782935 最近比较烦,研发给的pc服务版本在虚拟机上已经开始给客户使用了,服务老是莫名的死翘翘,客户不停的电话给我,搞的我心情很差,于是在一个下午,静下心来,用python写了个简单的监控进程的脚本,当发现进程消失的时候,立即调用服务,开启服务... 脚本的工作原理是这样的:脚本读取配置文件,读取预先配置好的调用系统

新手学window服务开发

Window服务是没有用户界面的,一般用于后台处理,比如批量处理数据,采集数据等. 第一步: 右键 生成成功后,将Debug文件夹下的内容拷贝出来到单独一个文件夹,比如 第二大部分 将写好的服务部署到计算机中 1.注册服务 开始,运行 输入CMD 进入命令界面 1.1.cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 1.2.InstallUtil.exe   F:\service\WindowsService1.exe 1.3 net start

WPF Window 服务安装

一.安装服务 1.已管理员的身份启动CMD 2.输入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 回车 3.输入 InstallUtil.exe Window服务软件路径.exe 回车 二.卸载服务 1.卸载很简单,打开cmd, 直接输入 sc delete WinServiceTest便可

使用工具安装,运行,停止,卸载Window服务

原文:使用工具安装,运行,停止,卸载Window服务 WSWinForm.exe介绍 WSWinForm.exe是我自己开发的一个实用的小工具,用于将任何EXE程序作为Windows服务运行.也就是说WSWinForm只是其注册程序的服务外壳,这个特性对于我们来说非常实用,我们可以通过它来安装,运行,停止,卸载Windows服务,而不再是通过命令行InstallUtil的方式来安装. 资源下载 你可以通过本文下载. 应用程序 源代码 如何使用 下载完软件以后,我们能干些什么呢?看看这个截图吧:.

.NET Window服务启动又马上停止,报错IO.FileNotFoundException

最近公司需要开发一个Window服务推送系统,读取MongoDB写入消息队列,推送到各终端平台 但是在开发完成,最后的部署阶段,选中服务右击启动 看似正常,服务显示已启动(但实质已经被终止,因为Window服务列表需要刷新才更新最新状态) 但是观察数据状态一直没有更新,消息也没有推送成功,才发现在windows系统日志中,有两个报错 在这两个错误页面看了一遍又一遍,又没标明具体哪儿错了,为啥终止,开始苦恼~~~ 直到后来发现,上图中红色框住的部分,可以Ctrl+A全选,然后Ctrl+C,再Ctr

自定义Window 服务

自定义window 服务 开发到使用的流程: 1.完成对应的代码之后(代码在底下),右键MyService.cs 添加安装程序 2.添加window服务安装程序打开Service1.cs[设计]页面,点击右键,选择[添加安装程序],会出现serviceInstaller1和serviceProcessInstaller1两个组件将serviceProcessInstaller1的Account属性设为[LocalSystem], serviceInstaller1的StartType属性设为[A