2013-06-20 120 views
1

我正在嘗試使用C#製作Windows服務。如何將控制檯應用程序轉換爲服務應用程序

我的問題是,我只有Visual Studio Express 2010,所以我不能生成「服務應用程序」。我的控制檯應用程序正在運行,並使用Inno Setup將其作爲服務安裝。

但當然,服務沒有啓動。所以我的問題是,控制檯應用程序和Windows服務之間的編碼區別是什麼 - 我必須做些什麼才能使我的應用程序成爲一項服務。

感謝

+1

不完全重複,但我認爲這會指向正確的方向:http://stackoverflow.com/q/7764088/56778 –

回答

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 
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開關。

相關問題