首页 > 代码库 > 6.28 Windows Serviece

6.28 Windows Serviece

描述:

A 软件,已经注册了一个windows服务并启用,现在需要在服务自己的一个类B里增加一个字段,服务的作用是返回一个该类型B的实例

做法

增加字段,替换服务文件,重新注册服务并开启,但是在A软件内的服务类型还是老版本的,返回的B类型数据有新加的字段,但是A软件内服务引用的接受数据的类型还是老类型,没有没有新加的字段.

 

windows服务

能创建可长时间运行的可执行应用程序

体系结构

  • System.ServiceProcess.ServiceBase -- 在创建服务时从 ServiceBase 类重写方法并定义代码,以确定服务在此继承类中的运行方式。

  • System.ServiceProcess.ServiceProcessInstaller 和 System.ServiceProcess.ServiceInstaller -- 使用这些类安装和卸载服务。

  •  ServiceController ,以与现有服务通信并控制其行为。

创建Windows服务

1 以编程方式编写服务。

2 用SV模板创建服务

两种方式都要做以下事情

  • 设置 ServiceName 属性。

  • 为你的服务应用程序创建必要的安装程序。

  • 替代并指定 OnStart 和 OnStop 方法的代码,以自定义你的服务的行为方式。

  • 添加服务应用程序所必需的安装程序
  • 通过从“生成”菜单选择“生成解决方案”来生成你的项目
  • 安装服务

添加服务应用程序所必需的安装程序

  切换到设计,右键添加安装程序

  界面上生成两个文件serviceInstaller1,serviceProcessInstaller1

  一个可以调整服务启动类型,一个设置账户可访问权限

  ServiceProcessInstaller 组件适用于项目中的所有单个服务安装程序。

  添加的安装程序和你的服务主体之间好像没有啥关系,只是记录一下这个服务的

安装windows服务(由类生成的服务)

管理员方式打开vstool下的VS2012 开发人员命令提示,cd到exe目录下,installutil xxx.exe(普通管理员的cmd不行)

然后就安装,启动服务

(我的测试程序是open一个文件,但是文件没被打开,手动再打开会显示文件被占用,可能这个服务一点界面相关的都不能有)

 

 

结论

windows服务不同于普通的exe执行文件,周期决定于应用程序,windows服务的生命周期长

用installutil方式将应用程序注册为服务

 

关于问题:

为什么服务更新不对?

因为我更改了服务地址:原来是http://192.168.40.31:8400/ACal/BaseService/mex

后来我注册的服务的地址是:http://192.168.40.31:8700/ACal/BaseService/mex

本机上注册的服务端口改变了,软件引用一个没有服务的地址,自然更新不了服务

 

6.28 Windows Serviece