如何将控制台应用程序转换为Windows服务?

问题描述:

如何将C#中的控制台应用程序转换为Windows服务?有没有一个模板可以做到这一点?如何将控制台应用程序转换为Windows服务?

+2

欢迎被调用,以#1,请仔细阅读[常见问题]和[提问]几次.. – 2013-03-19 07:19:55

+0

你尝试过什么? http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.80).aspx – Alex 2013-03-19 07:20:34

+0

我没有得到你的问题控制台应用程序和Windows服务是两个不同的东西。你想添加Windows服务在控制台程序? – Shrivallabh 2013-03-19 07:22:04

在您的代码中,您可以使用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() { } 
} 

当我在调试模式下构建简化调试时,我经常将Windows服务作为控制台应用程序运行。

您的情况最直接的方法可能是创建一个新的Windows服务,以使您的主入口点的正确结构和正确的引用,然后将您的控制台应用代码集成到该结构中。

读取/写入/从控制台写入必须重写。

如果您必须阅读用户输入,请考虑使用替代方法将该输入提供给服务。如果您将输出写入控制台,请将其写入日志。我个人会推荐NLog。

项目的一般属性 - >更改类型类库。
可以去除主要功能,因为它不会在

+1

主要功能当然是在Windows服务中调用的。 – 2013-03-19 16:36:33