Topshelf 窗口服务在尝试启动服务时出现错误 1053

Muk*_*thi 7 windows-services topshelf c#-4.0

我已经使用 Topshelf 开发了一个 Windows 服务。它在本地运行良好。当我部署测试并尝试启动服务时,它给了我以下错误:

Error 1053: The service did not respond to the start or control request in a timely fashion.
Run Code Online (Sandbox Code Playgroud)

测试服务器在 Windows Server 2012 上运行。

这是我的服务启动和停止方法:

public void Start()
{
    _logProvider.Info("Service started.");

    StartScheduledJobs();
}

public void Stop()
{
    _scheduler.Shutdown(true);

    _logProvider.Info("Service stopped.");
}

private void StartScheduledJobs()
{
    try
    {
        _scheduler.Start();

         ScheduleDeleteJob();
    }
    catch (Exception ex)
    {
        _logProvider.Error("", ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我解决解决方案的原因是什么?

谢谢

Dan*_*boy 6

在尝试了所有其他解决方案但没有成功后,我找到了一个解决方案,它用相同的错误消息解决了我的问题。

public static int Main(string[] args)
{
    Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
    //...
}
Run Code Online (Sandbox Code Playgroud)

基于https://github.com/Topshelf/Topshelf/issues/473


stu*_*rtd 3

问题是您正在该Start()方法中启动服务的工作。

这在开发过程中工作正常,但当您安装服务时,服务控制管理器会调用 Start 并等待 30 秒以使其返回 - 如果返回,则认为该服务已成功安装。

但是,因为您在 Start 方法中启动了计划的作业,所以它不会在该时间内返回,并且您会收到此错误。

解决方案是在 Start 中间接启动工作,然后返回 - 启动一个专用线程来执行此操作,或者使用计时器,有很多选择。