services开发总结

 

服务就是一个随操作系统自动启动,不需要用户登录操作系统就能启动的特定,对于一些需要一开机就需要启动的程序来说非常的方便。但是服务与一般的程序有一些特别之处,具有如下的特点:

a.自启动。

b.不需要和用户交互。不会由于一些错误的操作而把服务给关闭了。

c.可以长时间运行,

1.如何创建一个.net service服务

创建一个.net 服务主要包括2部分:serviceInstaller和一个继承自ServiceBase类的解决现实问题的程序代码。

1.1 继承自ServiceBase类的service

首先我们需要添加一个Windows Service的新项,如下图所示:

services开发总结_第1张图片

 

 添加ServiceAppTest完成后,在ServiceAppTest中有两个重要的方法OnStart和OnStop方法,我们需要在这两个方法中添加我们的逻辑代码。

1.2添加Installer.

在ServiceAppTest的设计视图中,右键->Add Installer,如下图所示

services开发总结_第2张图片

 

 在添加完installer后,在ServiceAppTest中会多出两个组件:serviceProcessInstaller1和ServiceInstaller1,我们可以在serviceInstaller1中添加服务的名称、描述、启动类型。在做完上面这些操作后,一个基本的windows service的架构就已经完成了,但是现在我们的服务不能做任何的事情,因为在OnStart和OnStop方法中没有添加任何的代码,接下去我们来完成这两个方法的代码。

 1.3添加OnStart和OnStop方法

在Onstart方法中一般是添加启动相关逻辑的代码,比如可以启动用于处理从客户端过来的socket连接的、数据查询等。一般做法是启动线程,然后让线程等待连接过来,尽量不要在onstart中启动比较耗时的操作,不然在windows service控制界面启动service的时候好以后很容易出现超时的错误。

在OnStop方法,一般是用于释放资源的操作,也要尽量简单.

2.发布服务到系统中

当我们需要手动部署windows service的时候,一般都是利用.net Frameworl中自带的installUtil.exe来完成注册,格式一般如下:

installUtil.exe service程序的全路径,如: installUtil.exe "c:\test\testService.exe"

卸载服务也可以采用insallutil.exe来完成,如: installUtil.exe "c:\test\testService.exe" /u

2.1注意问题

利用installuntil.exe命令来部署的时候会报文件找不到的错误,明明所有的service程序和依赖的dll都在目录下,为什么还会报FileNotFound的问题,一般会有如下的几个原因

a.如果是手动部署service,并且文件都是从其他地方(网络)拷贝过来,文件会被加锁(右键->属性),如下图:。出现这种情况只要解锁文件就可以了,然后重新利用installutil.exe来注册一般就可以。

b.一般installuntil.exe会存在两个目录中,一个在C:\Windows\Microsoft.NET\Framework\v+.net feamework版本;还有一个是在C:\Windows\Microsoft.NET\Framework64\v+.netframework版本号中。这两个在一般情况是就是64位程序和32位程序的区别。一般情况下可以使用C:\Windows\Microsoft.NET\Framework\v+.net feamework版本下的installutil.exe来注册服务就可以了。

你可能感兴趣的:(services开发总结)