编译输出类型为Exe的Windows服务

时间:2016-06-10 15:53:11

标签: c# windows-services

目前在开发Windows服务时我修改csproj以在调试模式下将OutputType设置为Exe,这样我就可以获得一个控制台窗口,我可以轻松地调试该服务。

我很好奇的是,在发布模式下将它投入生产是否存在任何问题?我没有看到控制台窗口,当通过InstallUtil安装服务然后启动时,它似乎没有显示或隐藏或者没有创建。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

大多数服务通常都是exe输出类型。是的,当它作为服务运行时将没有控制台,但只要你没有从控制台读取任何东西它不应该是一个问题。您可以作为服务写入控制台,系统将忽略该文本。

通常我做的是让程序监视字符串--debug作为命令行参数传入,如果它是启动服务器作为控制台应用程序,如果不启动它启动它作为一项服务。以下是如何执行此操作的示例:

static void Main(string[] args)
{
        var debugMode = args.Contains("--debug", StringComparer.InvariantCultureIgnoreCase);

        if (!debugMode)
        {
            ServiceBase[] servicesToRun =
            {
                new MyService();
            };
            ServiceBase.Run(servicesToRun);
        }
        else
        {
            var service = new MyService();
            service.StartService(args);
            Console.WriteLine("Service is now running, press enter to stop...");
            Console.ReadLine();
            service.StopService();
        }
    }
}

然后在服务代码中我做

public partial class MyService : ServiceBase
{
    internal void StartService(string[] args)
    {
        OnStart(args);
    }

    internal void StopService()
    {
        OnStop();
    }

    //... The rest of the code here
}