[英]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");
});
這是調用服務的一個非常冗長的版本(有很多控制台輸出),但即使是對ConstructUsing
或BeforeStartingService
的調用也不會產生任何控制台輸出,而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.