首页 > 解决方案 > Topshelf - 服务未及时启动

问题描述

我正在尝试使用 topshelf 创建 Windows 服务。我已成功创建我想要的内容并对其进行调试。我还设法使用

myservice.exe install

但是在尝试使用服务管理器启动服务时,我不断收到以下错误

在此处输入图像描述

我参考了以下帖子并尝试通过添加一个虚拟方法从新线程运行计时器。但这也会产生同样的问题。

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

https://github.com/Topshelf/Topshelf/issues/183

我的代码:

class Program
        {
            static void Main(string[] args)
            {
                var rc = HostFactory.Run(x =>                                   //1
                {
                   // x.StartManually();
                    x.Service<testclass>(s =>                                   //2
                    {
                        x.StartManually();
                        s.ConstructUsing(name => new testclass());                //3
                        s.WhenStarted(tc => tc.Start());                         //4
                        s.WhenStopped(tc => tc.Stop());                          //5
                    });
                    x.RunAsLocalSystem();                                       //6

                    x.SetDescription("Sample Topshelf Host");                   //7
                    x.SetDisplayName("Stuff");                                  //8
                    x.SetServiceName("Stuff");                                  //9
                });                                                             //10

                var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode());  //11
                Environment.ExitCode = exitCode;
            }
        }
    }

public class testclass
    {
     public testclass()
            {
                _timer = new System.Timers.Timer(1000) { AutoReset = true };
                _timer.Elapsed += _timer_Elapsed;
                startwatching();


            }
    void startwatching()
          {
              watcher.Created += new FileSystemEventHandler(copied);
              watcher.EnableRaisingEvents = true;
          }
    public bool Start()
    {


        var myThread = new Thread(new ThreadStart(foreverWhile));
        myThread.Start();
        return true;


    }

    public void Stop() { _timer.Stop(); }
    public void foreverWhile()
    {
        _timer.Start();

    }
    }

我从“startwatching”方法启动文件系统观察程序。我在做什么错?请指教

标签: c#.netservicetopshelf

解决方案


推荐阅读