如何将C#中的控制台应用程序转换为Windows服务?是否有模板可以做到这一点?
答案 0 :(得分:8)
在代码内部,您可以使用Environment.UserInteractive属性来确定您在控制台/服务中的模式。
示例:
static class Program
{
static void Main(params string[] args)
{
var service = new Service1();
if (!Environment.UserInteractive)
{
var servicesToRun = new ServiceBase[] { service };
ServiceBase.Run(servicesToRun);
return;
}
Console.WriteLine("Running as a Console Application");
Console.WriteLine(" 1. Run Service");
Console.WriteLine(" 2. Other Option");
Console.WriteLine(" 3. Exit");
Console.Write("Enter Option: ");
var input = Console.ReadLine();
switch (input)
{
case "1":
service.Start(args);
Console.WriteLine("Running Service - Press Enter To Exit");
Console.ReadLine();
break;
case "2":
break;
}
Console.WriteLine("Closing");
}
}
public partial class Service1 : ServiceBase
{
public Service1() { InitializeComponent(); }
public void Start(string[] args) { OnStart(args); }
protected override void OnStart(string[] args) { }
protected override void OnStop() { }
}
答案 1 :(得分:0)
我在构建调试模式时经常将我的Windows服务作为控制台应用程序运行,以简化调试。
在您的情况下,最直接的方法可能是创建一个新的Windows服务,以获得主入口点和正确引用的正确结构,然后将您的控制台应用程序代码集成到该结构中。
必须重写/从控制台读取/写入。
如果您必须阅读用户输入,请考虑使用其他方法向服务提供该输入。如果将输出写入控制台,请将其写入日志。我个人会推荐NLog。
答案 2 :(得分:-3)
项目的常规属性 - >将类型更改为类库 您可以删除主要功能,因为它不会被调用