簡體   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