将c#程序转换为Windows服务

时间:2014-12-01 05:14:59

标签: c# windows-services

我有一个API(c#),我必须将其转换为Windows服务:

现在API有一个我们必须在OnStart()

调用的函数
void Start()
{
    while (true)
    {
      //code
    }
    Thread.Sleep(int.Parse(900000);
}

所以我编码为: Service1.cs

protected override void OnStart(string[] args)
{
   Start();
}

protected override void OnStop()
{
}

Program.cs的

static void Main()
{
    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[] 
    { 
        new Service1()
    };
    foreach (ServiceBase sb in ServicesToRun)
    {
        sb.CanPauseAndContinue = false;
        sb.CanShutdown = true;
        sb.CanStop = true;
    }
    ServiceBase.Run(ServicesToRun);
}

这种方式是正确的还是我应该修改或者需要添加更多内容。

2 个答案:

答案 0 :(得分:1)

您可能希望在正常停止服务时添加OnStop方法来处理清洁人员。

您可以写入日志或关闭打开的文件,编写缓存数据 - 这一切都取决于您的实际代码,OnClose函数用于确保您从服务中正确退出。

答案 1 :(得分:1)

我建议您使用TopShelf库(可通过NuGet获取)。 使用TopShelf创建Windows服务非常简单:

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

        x.SetDescription("Sample Topshelf Host");        
        x.SetDisplayName("Stuff");                       
        x.SetServiceName("stuff");                       
    });                                                  
  }
}

TopShelf的优点在于您可以在开发期间从Visual Studio(F5 / Ctrl-F5)将程序作为普通控制台应用程序运行。

但是当您需要将其安装为Windows服务时,只需使用 install 参数运行程序: Program.exe install

或卸载它: Program.exe卸载

开始服务: Program.exe启动