1

我正在使用 Topshelf v3.1 将我的控制台应用程序安装为 Windows 服务。我通过命令行安装我的控制台,例如: myconsole install

除了命令似乎永远不会完成之外,一切似乎都很好,我的意思是通常一旦执行命令,命令行控制台将返回您可以再次键入另一个命令的状态。不知何故,topshelf 命令在最后一点停止,所以我必须 Control + C 来终止该命令。

我的代码如下:

class Program
    {
        static void Main(string[] args)
        {
            //HostFactory.Run(x =>
            //{
            //    x.Service<DummyService>(s =>
            //    {
            //        s.ConstructUsing(name => new DummyService());
            //        s.WhenStarted(tc => { });
            //        s.WhenStopped(tc => { });
            //    });

            //    x.RunAsLocalSystem();
            //    x.SetDescription("DummyService1");
            //    x.SetDisplayName("DummyService2");
            //    x.SetServiceName("DummyService3");
            //    x.StartAutomatically();
            //});
            var service = new DummyService();
            service.Run();            
        }
}

不知何故,如果我取消注释掉上面注释掉的块并注释掉 Main 方法中的最后两行。然后我再次运行该命令,它神奇地起作用。

PS: DummyService.Run 方法只是包装了注释代码块。本质上,它们是相同的。

有任何想法吗?

干杯,Ld

4

1 回答 1

1

Topshelf 用于运行服务。这是预期的行为。当 Windows 服务正常运行时,该服务需要连续运行(直到发送停止命令)。在命令行中,您需要按 CTRL+C 来发出服务结束的信号。

如果您只想运行一个命令,Topshelf 是错误的方法。Topshelf 允许您将服务作为命令行正常运行,作为调试服务的简便方法。

于 2013-03-05T22:31:26.540 回答