可以作为服务或控制台应用程序运行的应用程序的可接受模式是什么

Jac*_*yan 4 c# wcf windows-services

我有一个项目作为Windows服务部署到生产.但是,对于本地开发目的,将其作为控制台应用程序运行会很有用.目前我有一个Called类ReportingHost提供我的核心功能,还有一个名为ReportingServiceHost的类,它继承ServiceBase并允许我将应用程序作为服务运行.还有一个程序类,其主要方法调用ServiceBase.Run我的ReportingServiceHost.

我想我需要编写一个ReportingConsoleHost允许我在控制台中运行该功能的类.然后我需要修改我Main对命令行开关做出反应并选择其中一个.这些是我遇到麻烦的两个部分.

我已经看过这个并尝试使用该代码,但我的应用程序立即退出,它没有显示控制台窗口,并且它不会在关闭前等待Enter.

问题的一部分是我对这些事情的运作方式没有深刻的理解.一个分裂我的功能的权威模式,我运行该功能的两种不同方式,以及一个基于命令行参数选择这些方法之一的主方法是我希望实现的.

Mar*_*ell 9

我怀疑你的测试项目是配置为Windows exe,而不是控制台exe.使用Windows exe Console.ReadLine将立即返回.

要使控制台exe既可以作为服务也可以在命令行中运行,将其作为服务项目启动(在Visual Studio中) - 并添加一个检查Environment.UserInteractive- 即

static void Main() {
    if(Environment.UserInteractive) {
        // code that starts the listener and waits on ReadLine
    } else {
        // run the service code that the VS template injected
    }
}
Run Code Online (Sandbox Code Playgroud)

您当然也可以使用命令行开关.我在microsoft.public.dotnet.languages.csharp上有一个例子,它充当:

  • 安装程序/卸载程序
  • 一项服务
  • 控制台模式的应用程序

取决于开关