Windows服务创建与调试

本文介绍了如何使用Visual Studio创建Windows服务,并详细说明了调试过程中的关键步骤,包括服务的安装与卸载方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Windows服务

起因:前一段时间,业务需要,需要把某些功能封装起来做成服务,起先说的是服务基于WEB,于是先用WEB服务,做到后面,测试时候发现WEB服务功能太弱,无法满足复杂的分析需求,分析主要是GIS分析。一个稍微复杂的分析在前台后台传递数据耗时吓人。最后转战用WINDOWS服务,于是花了一段时间移植代码功能,期间碰到了一些问题。

定义:Windows服务指的是操作系统启动时候可以自动打开的应用程序,这个服务可以在没有用户登录系统的情况下运行,也就是跟用户已经脱离了关系。其实Windows服务跟其他正常的应用程序区别不大,只不过服务是在后台运行,一直运行,不用认为去控制,它就一直在哪里。这就好比把一个正常的windows应用程序一直运行着一样,这就是服务。。

关于服务运行的平台:Windows服务的运行需要NT核心,因此不能运行早95,98,ME上面,其他以后的版本都可以。

一:新建服务。文件->新建->项目->选择windows服务输入名称->ok


完成后,打开代码:

  public partialclass Service1 : ServiceBase

    {

        publicService1()

        {InitializeComponent();}

       protected override void OnStart(string[] args){ }

       protected override void OnStop() {}

类继承于ServiceBase 。ServiceBase是所有服务的基类,所有服务都必须实现它。

默认的重写了OnStart, OnStop方法。用来在服务启动和服务关闭时候做一些操作。

除此还可以重写其他的方法,OnContinue。OnPause。OnShutdown等等。

这样一个基本的服务就建立完成了。具体服务的功能自己添加。

 

二:关于服务的调试

Windows服务调试让人菊花一紧,琢磨了许久才整明白怎么调试,这个方法用着最舒服了。

首先在:

       protected override void OnStart(string[] args)

        {

           Thread.Sleep(15000);

        }

里面加一句代码,让主线程沉睡15秒,好让我们有足够的时候做玩需要做的动作,以进入调试状态。

重新生成些工程。可能有人会直接运行服务,结果往往看到一个弹出框,提示啥的就完了。服务的调试需要先安装服务。安装?不要听到这个就吓到了,简单服务的安装很简单:

需要写一点脚本:在工程声称目录BIN下面新建一个文本文件:打开输入

C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exeGISServices.exe

  Pause

 

GISServices是我的服务的名称,自己改成的。Pause 为服务安装后的操作,这快不做啥操作,暂停了。可以不写。写完后保存,将后缀名改为.bat。可执行文件。双击运行,

 

 

 

 

现在服务已经安装好了,打开服务管理器在里面找么会发现我们安装的服务。



双击打开服务,点启动,这个时候注意了,能不能计入调试状态就看这里了,点了启动后马上在工程里面打开调试->附加到进程





找到与服务名字对应的进程,附加进去。如果找不到记得把显示所有用户进程和显示所有会话的进程勾着。

然后就静静等待吧:

一会就会进入到断点。






然后就可以开始调试了。至此一个服务创建和调试就完成了。主要是调试麻烦的很。当对服务的功能坐了修改后,无伦什么修改,都需要对服务进行卸载重新安装。卸载一样也是一个可执行文件.BAT

 

C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe/u GISServices.exe

  pause

里面脚本稍有不同。

双击运行 :

 

 




最后卸载完成。

      ·一个服务创建很简单,调试是非常麻烦的,所以建议在做服务的时候先在普通程序里面实现服务的基本功能,最后再将功能移植到服务里面,这样可以减少很多工作量和很多不必要的麻烦。

 

三:与服务通信

 

由于服务是单独独立运行在后台的,你可能会很纳闷那怎么跟服务进行交互呢。在大多数情况下,逗是通过TCPCLIENT借助HTTP协议来进行通信。

 

有关TCPCLIENT这块网上很多,由于我很少涉及通信功能的开发,对这个不是很了解,只知道怎么用。就不在此累赘,

 


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值