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

时间:2015-02-26 11:00:35

标签: topshelf

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

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

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

3 个答案:

答案 0 :(得分:13)

这是一种黑客攻击,但您可以尝试将HostControl界面强制转换为ConsoleRunHost,如果属于该类型,则表示您正在运行控制台应用程序。

这不是理想的,当然,但你肯定可以用扩展方法隐藏它,使其不那么难看。

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

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:0)

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

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