在一个C#程序中同时实现Windows服务和控制台应用程序

3

我们一直在制作Windows服务,并且我们有一个非常好的模板,具有漂亮的小命令行参数,方便安装等。

这是我们想要做的事情...编写一段代码,使编译后的代码可以作为服务或控制台应用程序运行,这取决于您启动它的方式。

我们发现进行以下操作:

static void Main(string[] args)
{
    if (System.Environment.UserInteractive)
    {
        // You double clicked the exe
        Console.Write("You double clicked me")
    }
    else // Windows started me as a service.
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] { new Service_Manager() };
        ServiceBase.Run(ServicesToRun);
    }
}

这是一种很好的方式,可以执行安装服务等操作。然而,控制台未显示。因此,除了编写两个应用程序并共享DLL之外,是否有一种简单的方法或可以包含的内容,以使“控制台”显示?


5
将项目类型更改为控制台应用程序(现在它必须是Windows应用程序)。 - Marcel N.
不要创建一个可以在控制台或服务中运行的应用程序,而是将所有逻辑简单地抽象到另一个程序集中,并创建两个引用您服务代码的项目。 - Nico
完美,成功了!将其设置为“控制台应用程序”就解决了问题 - 现在我们可以在本地PC上进行测试,而不必经过安装服务等繁琐的过程来测试它们是否正常工作。将其切换回应用程序,并将其发送到服务器...太好了! - Conrad de Wet
1个回答

0

如果你想的话,可以使用TopShelf,它正是你要找的。

你可以编写一个实际上是Windows服务但可以作为控制台应用程序运行的应用程序。

这样做可以使调试变得更加容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接