簡體   English   中英

Topshelf:成功安裝服務后,install命令不會返回

[英]Topshelf: install command does not return after successfully installing the service

注意:我沒有做任何與Topshelf相似的安裝程序要求我按兩次輸入 - 為什么?

服務類(有趣的部分):

public class ServiceCore
{
    public ServiceCore(ServiceRuntimeConfiguration serviceRuntimeConfiguration)
    {
        _runningTasks = new List<Task>();
    }

        public bool Start(HostControl hostControl)
        {
            _hostControl = hostControl;
            _messageProcessor.Start(); // Starts a System.Threading.Tasks.Task
            StartListener(); // starts a System.Threading.Tasks.Task
            return true;
        }
}

Program.cs中:

Host host = HostFactory.New(configurator =>
{

configurator.UseNLog();

// Configure core service
configurator.Service<ServiceCore>(svc =>
{
    svc.ConstructUsing(theService => new ServiceCore(_serviceRuntimeConfiguration));
    svc.WhenStarted((svc, hostControl) => svc.Start(hostControl));
    svc.WhenStopped((svc, hostControl) => svc.Stop(hostControl));
});

// Configure recovery params
configurator.EnableServiceRecovery(recoveryConfigurator =>
{
    recoveryConfigurator.RestartService(0);
    recoveryConfigurator.OnCrashOnly();
    recoveryConfigurator.SetResetPeriod(1);
});

// Execute HostConfigurator
host.Run();
}

問題

當我這樣做:

MyService.exe install --manual --localsystem

該服務安裝正常,但該命令永遠不會返回:

運行事務安裝。

開始安裝的安裝階段。 安裝服務NotificationEngine.Main ...服務NotificationEngine.Main已成功安裝。

安裝階段成功完成,提交階段正在開始。

提交階段成功完成。

事務處理安裝已完成。

^ C(我必須按CTRL + C)

我該怎么做才能使install命令完成然后返回?

注意如果我運行幫助(即幫助顯示但命令不返回),則可以觀察到相同的行為:

MyService.exe help

通常,這意味着您不釋放某些資源的控制權,並且該流程無法徹底退出。 然而,這些東西很復雜,所以很難說肯定。

我會嘗試一些事情

  • 安裝/ CTRL + C后執行MyService start時會發生什么? 我假設它也會因為幫助而阻塞。
  • 檢查日志記錄,你有沒有啟用? 是否存在文件爭用或權限問題?
  • 您的Main()入口點還有什么作用? 它是在host.Run()之后做的嗎? 上面的代碼使得它看起來就像你在該對象的構造中調用它,但我認為它是糟糕的切割粘貼。
  • 確保在ConstructUsingWhen*回調被觸發之前沒有初始化資源。

在此之后,我會將此信息發送到https://groups.google.com/forum/#!forum/topshelf-discuss上的郵件列表。

ServiceCore:ServiceBase

在configurator.Service中指定的類型T應該是ServiceBase的子類。

這解決了安裝正常但掛在安裝/卸載的最后一步的服務的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM