记录几个window服务常见的坑

 

Windows服务看起来很简单,但在实际使用过程中经常会有奇奇怪怪的问题,我不相信只有我一个人遇到这些错误。

 

1,删除服务删不掉
   不管我们用什么方式删除服务,删除的只是标记,正在运行的服务并不会停下来。这会导致一些其他的问题。所以删除后一定要执行停止服务的命令或在服务面板停止服务,或者干脆在先停止服务再删除。

 

 

 

 

2,停止服务停不掉

 

 

 

 

 

停止服务时,有时候会出现停不调,关不了,删不掉的情况。这个时候可以在任务管理器里面找到这个进程然后杀死。
快速寻找进程的方法:右击任务管理器列表的表头,勾选命令行。然后就可以看见应用程序的目录了。根据命令行目录很容易找到。

 

 

 

 


3, 启动/停止服务很慢或者超时。

造成这个问题往往是你的代码有问题,服务的代码往往是一段阻塞或者轮询式的代码。

 

 onStart里面写阻塞的代码,虽然可以正常执行,但是阻塞会让服务控制中心认为启动超时。 正确的做法是在一个新的线程里面执行我们的阻塞代码。

    

//正确的方式,在一个线程里面启动我们的业务
      protected override void OnStart(string[] args)
      {
         

         Thread thread = new Thread(() =>
         {

            while (true)
            { 
              //todo
            }

         }); ;
         thread.Start();
       
      }


      //错误的方式,这里的阻塞会让service.msc不知道我们启动成功了没有
      protected override void OnStart(string[] args)
      {

 

            while (true)
            {
               //todo
            }

         
      } 

  

4,控制台程序可以作为服务吗?

不可以。服务必须实现一些功能接口,比如:安装,启动,暂停等等。

        普通的非服务程序,虽然可以用sc 命令安装成功,但无法正确执行。

正确的做法还是创建window 服务程序。

 

 

 

几个常用命令


创建服务
sc create 服务名 binpath="exe文件路径" displayName=显示名称 start=auto

 

修改服务描述
sc description 服务名 "服务描述"

 

停止服务
sc stop 服务名


删除服务
sc delete 服务名

 

posted @ 2021-03-09 17:19  小小爵  阅读(181)  评论(0编辑  收藏  举报