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

How to detect if Topshelf is running in console mode

我将 Topshelf 与 FluentSchedule 结合用于 Windows 服务。

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

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

这有点 hack,但您可以尝试将 HostControl 界面转换为 ConsoleRunHost,如果是那种类型,您就是 运行 作为控制台应用程序。

当然,这并不理想,但您肯定可以将其隐藏在扩展方法中以使其不那么难看。

public static bool IsRunningAsConsole(this HostControl control)
{
    return control is ConsoleRunHost;
}

然后您可以通过调用服务配置中的 WhenStarted() 传入 HostControl 来访问它。

s.WhenStarted((tc, hostControl) => tc.Start(hostControl));

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

我总是为我的 Topshelf 服务设置服务名称、显示名称和服务描述。在服务属性 window 的“可执行文件路径”中,您可以看到这些东西的命令行开关。也就是说:当运行作为服务时,args数组不会为空。

    if (args.Count() == 0 && Environment.UserInteractive)
    {
        // Running in console mode
    }