Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Topshelf:install命令在成功安装服务后不会返回_C#_.net_Topshelf - Fatal编程技术网

C# Topshelf:install命令在成功安装服务后不会返回

C# Topshelf:install命令在成功安装服务后不会返回,c#,.net,topshelf,C#,.net,Topshelf,注意:我没有做任何类似的事情 服务类别(有趣的部分): 服务安装正常,但命令永远不会返回: 正在运行事务处理安装 开始安装的安装阶段。安装服务 通知引擎。主。。。Service NotificationEngine.Main已被删除 已成功安装 安装阶段已成功完成,提交阶段已完成 开始 提交阶段已成功完成 已完成事务处理的安装 ^C(我必须按CTRL+C) 要完成install命令并返回,我应该做什么 注意如果我运行帮助,则可以观察到相同的行为(即显示帮助,但命令不返回): 一般来说,这意味着您

注意:我没有做任何类似的事情

服务类别(有趣的部分):

服务安装正常,但命令永远不会返回:

正在运行事务处理安装

开始安装的安装阶段。安装服务 通知引擎。主。。。Service NotificationEngine.Main已被删除 已成功安装

安装阶段已成功完成,提交阶段已完成 开始

提交阶段已成功完成

已完成事务处理的安装

^C(我必须按CTRL+C)

要完成install命令并返回,我应该做什么

注意如果我运行帮助,则可以观察到相同的行为(即显示帮助,但命令不返回):


一般来说,这意味着您不能释放对某些资源的控制,并且进程不能干净地退出。然而,这些东西很复杂,所以很难说清楚

有几件事我想试试

  • 安装/CTRL+C后执行
    MyService start
    时会发生什么?我假设它也会阻塞,因为帮助会阻塞
  • 检查日志记录,是否启用了任何日志记录?是否存在文件争用或权限问题
  • 您的
    Main()
    入口点还做什么?它是否在执行host.Run()之后的操作?上面的代码使它看起来像是从该对象的构造中调用的,但我认为这是糟糕的剪切粘贴
  • 确保在启动*回调时,使用
    构造函数之前没有初始化资源
    

在这之后,我会把这个带到我们的邮件列表中

ServiceCore:ServiceBase

configurator.Service中指定的类型T应为ServiceBase的子类


这修复了一个服务的问题,该服务可以很好地安装,但会挂在安装/卸载的最后一步。

感谢您详细的回答。我查一下再寄回来。
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;
        }
}
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
MyService.exe help