我正在使用Topshelf与FluentSchedule结合使用Windows服务。
但是,我希望能够试运行应用程序只是启动而不执行设置计时器等的FluentSchedule代码。
有没有办法从命令行运行exe文件(即没有'install'命令)从TopShelf检查它是否在控制台模式下运行?
答案 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
}