window 服务(一)

摘要:
Windows服务应用程序是一个长期在操作系统后台运行的程序。它特别适用于服务器环境。它没有用户界面,也不会产生任何视觉输出。任何用户输出都会写回Windows事件日志。10stringdate=DateTime.Now。ToString+“开始”;11写入日志;12} 13protectedoverridevoidOnStop()14{15/TODO:在此处添加代码以执行停止服务所需的关闭操作。

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

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

window 服务(一)第1张

创建window 服务

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

window 服务(一)第2张

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

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

window 服务(一)第3张

双击Timer事件,添加事件

       

window 服务(一)第4张window 服务(一)第5张后台代码
 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,如下图

window 服务(一)第6张

设置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 服务(一)第7张

然后再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()

等待服务到达指定的状态

免责声明:文章转载自《window 服务(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇时间序列八: 以NASA之名: 卡尔曼滤波器git rebase简介(基本篇)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java程序配置成windows系统服务

分两步执行: 第一步:将java打成jar包,并用exe4j打成exe包 exe4j很好用,需要说明的是有32位和64位系统的区别。下面是一个64位配置成功的exe4j文件,打成的exe不包含jre,比jar包略大。需要服务器有java环境。 success_64.exe4j 2.0 KB 1.选jar in exe mode 2.填应用名称和输出路径...

64位Windows操作系统中的注冊表

x64系统上有x64、x86两种注冊表,记录下。 64 位Windows系统中的注冊表分为 32 位注冊表项和 64 位注冊表项。很多 32 位注冊表项与其对应的 64 位注冊表项同名。 在64位版本号系统的注冊表编辑器中,32 位注冊表项显示在下面注冊表项下: HKEY_LOCAL_MACHINESoftwareWOW6432Node 使用默认的...

Redis简单入门安装(windows系统)

一、首先从点击跳转下载  下载好后安装,一定要确定好目录,我这里选择安装目录在D盘新建了一个redis文件夹  win + r 打开cmd ,或者右键左下角windows图标,点击运行,输入cmd 打开后会在C盘目录  先切换目录到d盘redis目录下面 输入 redis-server.exe --service-install redis.wi...

服务器上安装VMWare ESXi6.0,并安装Windows虚拟机教程

模拟安装教程 首先要在电脑上安装Vmware WorkStation,比较简单,在此不赘述 1、打开Vmware WorkStation,点开“创建新的虚拟机”; 2、选择“典型”就可以了; 3、选择“稍后安装操作系统” 4、我下载的镜像是VMWare ESXI6.0的,所以这里选择6.0版本的; PS:镜像可以从VMWare官网下载  5、这里输...

X32,X64,X86 代表什意义

  X32,X64,X86是什么意思 各代表什么:X86指32位,X64指64位,现在用户最多的是XP,但win7是趋势,发展很快,建议你装个win7 32位的系统,下载的话地方很多,官方安装原版和ghost等,你可以百度一下.关于32,64位系统,两者区别见下:   32位,64位,Windows 7 我该装哪个?   装系统之前咱得想明白了要装哪个版本...

Windows程序运行原理 之 WNDCLASS详解

#include <windows.h>#include <stdio.h>//包含应用程序中数据类型和数据结构的定义LRESULT CALLBACK WinSunProc(  HWND hwnd,      // handle to window  UINT uMsg,      // message identifier  WP...