目前在开发Windows服务时我修改csproj以在调试模式下将OutputType设置为Exe,这样我就可以获得一个控制台窗口,我可以轻松地调试该服务。
我很好奇的是,在发布模式下将它投入生产是否存在任何问题?我没有看到控制台窗口,当通过InstallUtil安装服务然后启动时,它似乎没有显示或隐藏或者没有创建。
有什么想法吗?
答案 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
}