代码之家  ›  专栏  ›  技术社区  ›  BlueMonkMN

Windows服务在启动期间挂起

  •  2
  • BlueMonkMN  · 技术社区  · 17 年前

    更新1: 这是我在OnStart中的全部功能:

      host = New ServiceHost(GetType(FSE.Licensing.FSELicense))
      host.Open()
    

    FSELicense没有定义构造函数,所以我想它只是获取VB.NET提供的默认空公共构造函数。

    更新2: 我的问题是根据一位同事提出的解决方案演变而来的,据说他解决了这个问题。这个解决方案实际上只是简单地添加了对另一个服务的依赖,我认为这是不必要的,因为我的服务在请求之前不会做任何事情。但是,它确实声明了COM类型的变量。是否有可能引用此COM类型(即使没有实例)会导致COM DLL与服务同时加载,并且可能依赖于服务?我没有意识到COM引用就像.NET中的静态链接,如果是这样的话。

    4 回复  |  直到 17 年前
        1
  •  4
  •   jim    16 年前

    请参阅此链接以了解有关的说明 adding a service dependency DependOnService 我使用的值是 HTTPFilter

        2
  •  2
  •   oefe    16 年前

    尽量减少系统中的处理 OnStart ; 特别是,避免在未知时间内阻塞;e、 不要试图连接远程计算机——没有数据库查询,没有服务请求。

    如果您需要执行一些可能会阻塞或需要很长时间的操作,请尽可能为此任务生成一个单独的线程。

    启动 . 在这种情况下,您可以使用 ServiceBase.RequestAdditionalTime 请求更多的时间 启动 结束。

        3
  •  1
  •   Klaus Schüssler    15 年前

        4
  •  0
  •   David    17 年前

    这是一个猜测,但在系统启动期间,有太多的东西在幕后加载,这已经减慢了速度。

    所以

    根据FSE.Licensing.FSELicense在内部执行的操作,它可能正在等待它所依赖的其他服务首先加载,也可能只是因为机器速度慢,同时加载所有后台进程,而您的服务只是在与所有这些进程争夺资源。

    然而,你看到的警告我只是一个警告。我在我的一些服务中看到了这一点,这些服务可能需要一段时间才能加载。这是显而易见的,我甚至可能不需要说,但服务控制管理器希望在特定的时间段内加载服务(我不确定这是什么),但如果服务出现挂起,它会记录此消息,但与此同时,服务仍在尝试加载。只要您的服务正在启动,我就不会太担心这个警告,除非您能找到更好的编码方法来避免这种情况。

    您可以检查的一件事是在服务控制台中,查看服务的属性和“依赖项”选项卡。它可能是空白的,但它可能会给你一些洞察力。

    推荐文章