如何检测Topshelf是否在控制台模式下运行

Red*_*ed1 12 topshelf

我正在使用Topshelf与FluentSchedule结合使用Windows服务.

但是,我希望能够试运行应用程序只是启动而不执行设置计时器等的FluentSchedule代码.

有没有办法从命令行运行exe文件(即没有'install'命令)从TopShelf检查它是否在控制台模式下运行?

Chr*_*son 16

这有点像黑客,但你可以尝试将HostControl接口转换为ConsoleRunHost,如果是那种类型,你就是作为控制台应用程序运行.

当然,这并不理想,但你肯定可以在扩展方法中隐藏它,以减少它的难度.

public static bool IsRunningAsConsole(this HostControl control)
{
    return control is ConsoleRunHost;
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过在服务配置中调用WhenStarted()来访问HostControl.

s.WhenStarted((tc, hostControl) => tc.Start(hostControl));
Run Code Online (Sandbox Code Playgroud)

  • 这不回答这个问题.它只是一段代码.叹. (5认同)
  • 我很难确定在运行时作为HostControl引用的内容和时间.在调用HostFactory.Run(x =>等)之前我可以参考什么?这将是一个HostControl?或者我太早做了?我应该在服务类中检查这个,我在x.Service <T>中实例化,再一次,我可以在该类中引用什么作为HostControl? (2认同)

Fra*_*tha 10

你可以用Environment.UserInteractive.从技术上讲,这在100%的情况下都不起作用,因为可以在用户交互模式下运行服务,但这是一个边缘情况.