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

时间:2013-06-20 21:47:17

标签: c# windows-services

我正在尝试使用C#创建一个Windows服务。

我的问题是我只有Visual Studio Express 2010,因此我无法生成“服务应用程序”。我的控制台应用程序正在运行,我使用Inno Setup将其作为服务安装。

但当然,服务还没有开始。所以我的问题是,控制台应用程序和Windows服务之间的编码差异是什么 - 我必须做些什么来使我的应用程序作为服务工作。

由于

2 个答案:

答案 0 :(得分:1)

我强烈建议您查看TopShelf以将您的控制台应用程序转换为Windows服务。所需的代码更改非常少;基本上

public class Service
{
    public void Start() 
    {
         // your code when started
    }

    public void Stop() 
    {
         // your code when stopped
    }
}

public class Program
{
    public static void Main()
    {
        HostFactory.Run(x =>                                 
        {
            x.Service<Service>(s =>                    
            {
               s.ConstructUsing(name=> new Service());   
               s.WhenStarted(tc => tc.Start());            
               s.WhenStopped(tc => tc.Stop());           
            });
            x.RunAsLocalSystem();                          

            x.SetDescription("My service description");      
            x.SetDisplayName("ServiceName");                    
            x.SetServiceName("ServiceName");                   
        });                                                 
    }
}

然后从命令行安装它

service.exe install

答案 1 :(得分:0)

我们在这些方面使用了一些东西:

using System.ServiceProcess;
using System.Diagnostics;
using System;

namespace MyApplicationNamespace
{
    static class Program
    {
        static void Main(string[] args)
        {
            if (args != null && args.Length > 0)
            {    
                switch (args[0])
                {
                    case "-debug":
                    case "-d":
                        StartConsole();
                        break;

                    default:
                        break;
                }
            }
            else
            {
                StartService();
            }    
        }

        private static void StartConsole()
        {
            MyApp myApp = new MyApp();
            myApp.StartProcessing();
            Console.ReadLine();
        }

        private static void StartService()
        {
            ServiceBase[] ServicesToRun;   
            ServicesToRun = new ServiceBase[] { new MyApp() };
            ServiceBase.Run(ServicesToRun);
        }               
    }
}

MyApp将继承自

System.ServiceProcess.ServiceBase

然后,您可以使用

安装该服务
installutil app.exe

要从控制台运行,只需使用-d或-debug开关。