zoukankan      html  css  js  c++  java
  • 记录几个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 服务名

  • 相关阅读:
    JavaScript
    Eclipse修改类的注释模板
    无法解析指定的连接标识符的解决办法
    MySQL
    IDEA修改SQL语句的关键字大写
    iframe中操作后通过后台返回脚本,让父窗口刷新
    IDEA启动Tomcat控制台打印乱码
    Eclipse如何打开文件的磁盘位置
    深度学习目标检测算法综述(论文和代码)
    关于并发,异步,非阻塞(python)疑惑的一些资料解答
  • 原文地址:https://www.cnblogs.com/jimsfriend/p/14506753.html
Copyright © 2011-2022 走看看