• 记录几个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 服务名

  • 相关阅读:
    js中盒子模型常用的属性你还记得几个?
    编写一个关于浏览器盒子模型的方法
    Javascript中关于作用域和闭包和域解释的面试题
    时间格式转换
    HDU Subset sequence
    bugku never give up
    HDU 2136 Largest prime factor
    HDU 2099 整除的尾数
    杭电acm 2070
    ACM Elevator
  • 原文地址:https://www.cnblogs.com/jimsfriend/p/14506753.html
Copyright © 2020-2023  润新知