繁体   English   中英

Topshelf 不调用服务启动

[英]Topshelf does not call service start

我在 Topshelf 中看到不同的行为,具体取决于我是以独立模式启动应用程序还是作为服务安装。 我试过 Topshelf 3.3.1 和 4.1。

我正在使用实现 ServiceControl 的服务,该服务在独立模式下运行良好。 尝试启动已安装的服务时,我收到该服务响应控制请求的时间过长的消息。

var resultCode = HostFactory.Run(x =>
{
    x.Service<ServiceControl>(sc =>
    {
        sc.ConstructUsing(() =>
        {
            Console.WriteLine("GET INSTANCE!");
            return new WorkerService();
        });
        sc.WhenStarted((s, h) =>
        {
            Console.WriteLine("START!");
            return s.Start(h);
        });
        sc.WhenStopped((s, h) =>
        {
            Console.WriteLine("STOP!");
            return s.Stop(h);
        });
        sc.BeforeStartingService(() => Console.WriteLine("BEFORE START!"));
    });

    x.SetDescription("WorkerService");
    x.SetDisplayName("WorkerService");
    x.SetServiceName("WorkerService");
});

这是调用服务的一个非常冗长的版本(有很多控制台输出),但即使是对ConstructUsingBeforeStartingService的调用也不会产生任何控制台输出,而Service<> lambda 中的日志调用会产生输出。

我在这里一无所知,但也无法用最少的样本重现这一点。 大约 3-4 秒后超时,没有任何可见的启动服务尝试。 从程序 main 启动服务线程确实可以正常工作。

使用WorkerService.exe启动服务按预期工作,使用WorkerService.exe start (启动服务)启动它不起作用。

由于 Topshelf 3 和 4 发生这种情况,很可能是我在应用程序中做错了。 任何指向正确方向的指针都非常感谢。

您是否已将WorkerService注册为ServiceControl? 如果没有,请注册服务。 (您是否使用Autofac?)。 如果没有,请尝试提供

x.Service<WorkerService>(sc => // Your code

代替ServiceControl

我现在处于领先地位:作为加载配置的一部分,我们从漫游AppData加载文件,并且看起来如果该文件不可访问,则会引发异常并以静默方式将其丢弃。 如果该文件不存在,该服务将按预期启动,并且一切正常。

因此,基本问题是在启动Topshelf服务配置部分之前引发了未捕获的异常,该异常似乎用于在使用start参数调用exe时将某些输出转发到命令行应用程序。

我将尝试在时间允许的情况下对此进行调查,并通过学习为Topshelf做出贡献。

尝试在 cmd 中注册服务(具有管理员权限):

安装: yourApplication.exe install
卸载: yourApplication.exe uninstall

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM