创建、安装、调试windows service(附详细步骤)
2015-09-25 11:13
274 查看
最近项目中需要做一个定时执行某个服务的功能,刚开始想用Oracle JOB做,但是后来发现程序的主要逻辑不是写在存储过程中的,所以决定用Windows Service来做。倒腾倒腾了半天,也算是圆满成功。
先介绍一下我的开发平台,VS 2005(有点老哦,项目是升级原来的系统,所以平台也是2005)、windows 7、Oracle等等。好了话不多说,进入正题……
*Step1 ——创建windows service*
1.在解决方案上新增新建项,选择Windows 服务,改好名字后点击确定(本文用到的名字为WindowsService1.cs)
![](https://img-blog.csdn.net/20150925114825636?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20150925114850393?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20150925121735094?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
添加完成后,会发现VS已经建立了windows service必要的引用关系和文件(建议修改Service1.cs名称)。
2.接下来,我们可以看到Service1.cs中出现OnStart()和OnStop()两个事件,当然,ServiceBase还提供了OnPause/OnContinue的方法类,可以按照字面意思去理解,
4000
基于本次需求,只用到了OnStart()和OnStop()两个事件,在这两个事件里面写了具体的方法(根据需要编写)
![](https://img-blog.csdn.net/20150925113804880?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
添加完OnStart()和OnStop()中的方法后,还可以看看Program.cs中的代码,核实ServicesToRun中对应的服务名是否和服务名称一致。最后生成一下,就可以看到Service1.exe文件了……接下来我们要进行下一步,建立安装程序。
(PS:这一切都完成后,服务还是没有办法双击就运行,它需要一个安装类(Installer)来辅助)
*Step2——创建service安装类*
1.在Windows Service解决方案下新增安装程序类(自己命名)
![](https://img-blog.csdn.net/20150925123501542?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.新增完成后在Installer的设计器中先声明两个引用serviceProcessInstaller1和serviceInstaller1,他们作用于Service和InstallUtil.exe的执行。
private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
private System.ServiceProcess.ServiceInstaller serviceInstaller1;
3.我们需要在这个安装类中创建一个service安装进程和service安装类:
private void InitializeComponent()
{
this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
}
4.然后再设置安装类对应服务的名称以及相关配置
this.serviceInstaller1.Description = "Your Description";//填写你的服务的描述
this.serviceInstaller1.ServiceName = "YourServiceName";//填写你的服务的名称
this.serviceInstaller1.StartType =
System.ServiceProcess.ServiceStartMode.Automatic;//Automatic代表服务的启动方式为自动启动
this.serviceProcessInstaller1.Account =
System.ServiceProcess.ServiceAccount.LocalSystem;//LocalSystem表示用本地系统账户启动(不需要用户名和密码)
this.serviceProcessInstaller1.Password = null;
this.serviceProcessInstaller1.Username = null;
this.Installers.AddRange(new System.Configuration.Install.Installer[]
{this.serviceInstaller1,this.serviceProcessInstaller1});
5.编写完成之后生成以下,安装类也就这样完成了,下一步我们进入widnows service的安装环节。
*Step3 ——Widnows Service的安装*
Widnows Service的安装可以用一下两种形式实现:
1.CMD的DOS命令行
输入C:/Windows/Microsoft.NET/Framework/v2.0.50727/InstallUtil.exe 你的service.exe存放路径\你的service名称.exe来执行安装服务;
![](https://img-blog.csdn.net/20150925141310061?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20150925141441121?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
输入...installutil.exe /u ..路径\你的service名称.exe来卸载service安装
![](https://img-blog.csdn.net/20150925141824705?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2.利用txt文档编写安装和卸载的bat执行文件(文件内容如下)
安装:
![](https://img-blog.csdn.net/20150925142110945?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
卸载:
![](https://img-blog.csdn.net/20150925142158784?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
3.安装完成后,可以在服务中看到自己安装的服务进程,则代表安装成功
![](https://img-blog.csdn.net/20150925142633148?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
*Step4 ——调试Widnows Service*
Widnows Service的调试可是有点揪心,不过按照网友的方法,现学现卖也是调试进去了,步骤如下:
1.首先编译好服务,在合适的地方加上断点
2.启动(或者重启)服务,用bat或者命令行都可以
3.VS2005中“调试 –> 附加到进程”选择对应的服务进程并添加(速度要快,接着就可以进入断点啦)
![](https://img-blog.csdn.net/20150925144000032?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20150925144052950?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
先介绍一下我的开发平台,VS 2005(有点老哦,项目是升级原来的系统,所以平台也是2005)、windows 7、Oracle等等。好了话不多说,进入正题……
*Step1 ——创建windows service*
1.在解决方案上新增新建项,选择Windows 服务,改好名字后点击确定(本文用到的名字为WindowsService1.cs)
添加完成后,会发现VS已经建立了windows service必要的引用关系和文件(建议修改Service1.cs名称)。
2.接下来,我们可以看到Service1.cs中出现OnStart()和OnStop()两个事件,当然,ServiceBase还提供了OnPause/OnContinue的方法类,可以按照字面意思去理解,
4000
基于本次需求,只用到了OnStart()和OnStop()两个事件,在这两个事件里面写了具体的方法(根据需要编写)
添加完OnStart()和OnStop()中的方法后,还可以看看Program.cs中的代码,核实ServicesToRun中对应的服务名是否和服务名称一致。最后生成一下,就可以看到Service1.exe文件了……接下来我们要进行下一步,建立安装程序。
(PS:这一切都完成后,服务还是没有办法双击就运行,它需要一个安装类(Installer)来辅助)
*Step2——创建service安装类*
1.在Windows Service解决方案下新增安装程序类(自己命名)
2.新增完成后在Installer的设计器中先声明两个引用serviceProcessInstaller1和serviceInstaller1,他们作用于Service和InstallUtil.exe的执行。
private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
private System.ServiceProcess.ServiceInstaller serviceInstaller1;
3.我们需要在这个安装类中创建一个service安装进程和service安装类:
private void InitializeComponent()
{
this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
}
4.然后再设置安装类对应服务的名称以及相关配置
this.serviceInstaller1.Description = "Your Description";//填写你的服务的描述
this.serviceInstaller1.ServiceName = "YourServiceName";//填写你的服务的名称
this.serviceInstaller1.StartType =
System.ServiceProcess.ServiceStartMode.Automatic;//Automatic代表服务的启动方式为自动启动
this.serviceProcessInstaller1.Account =
System.ServiceProcess.ServiceAccount.LocalSystem;//LocalSystem表示用本地系统账户启动(不需要用户名和密码)
this.serviceProcessInstaller1.Password = null;
this.serviceProcessInstaller1.Username = null;
this.Installers.AddRange(new System.Configuration.Install.Installer[]
{this.serviceInstaller1,this.serviceProcessInstaller1});
5.编写完成之后生成以下,安装类也就这样完成了,下一步我们进入widnows service的安装环节。
*Step3 ——Widnows Service的安装*
Widnows Service的安装可以用一下两种形式实现:
1.CMD的DOS命令行
输入C:/Windows/Microsoft.NET/Framework/v2.0.50727/InstallUtil.exe 你的service.exe存放路径\你的service名称.exe来执行安装服务;
输入...installutil.exe /u ..路径\你的service名称.exe来卸载service安装
2.利用txt文档编写安装和卸载的bat执行文件(文件内容如下)
安装:
卸载:
3.安装完成后,可以在服务中看到自己安装的服务进程,则代表安装成功
*Step4 ——调试Widnows Service*
Widnows Service的调试可是有点揪心,不过按照网友的方法,现学现卖也是调试进去了,步骤如下:
1.首先编译好服务,在合适的地方加上断点
2.启动(或者重启)服务,用bat或者命令行都可以
3.VS2005中“调试 –> 附加到进程”选择对应的服务进程并添加(速度要快,接着就可以进入断点啦)
相关文章推荐
- 如何有效地防止网站和手机APP的数据被采集?
- 堆排序
- Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
- Ubuntu Server 命令
- 快速排序算法实施尾递归优化
- Websocket简介
- Google Java Style
- vo查询,vo更新等规范
- C语言的整型溢出问题
- 【jQueryUI】利用accordion、tabs与自定义面板布局
- Android实战简易教程<二十>(GridView长按显示删除)
- UNIX安全读写函数——readn和writen
- 后台静态页面实例
- Unity3D之UGUI学习笔记(一):UGUI介绍以及Canvas
- android 电容屏(二):驱动调试之基本概念篇
- sqlite3使用教程1 SQLite 命令
- 约瑟夫环数组实现
- 【找bug有奖励】:关于加密算法的一个bug,知道答案评论对了支付宝奖励5块
- Machine Learning Done Wrong
- php 正则中的"i,m,s,x,e"分别表示什么