2013-03-19 174 views
3

如何將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

回答

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() { } 
} 
0

當我在調試模式下構建簡化調試時,我經常將Windows服務作爲控制檯應用程序運行。

您的情況最直接的方法可能是創建一個新的Windows服務,以使您的主入口點的正確結構和正確的引用,然後將您的控制檯應用代碼集成到該結構中。

讀取/寫入/從控制檯寫入必須重寫。

如果您必須閱讀用戶輸入,請考慮使用替代方法將該輸入提供給服務。如果您將輸出寫入控制檯,請將其寫入日誌。我個人會推薦NLog。

-3

項目的一般屬性 - >更改類型類庫。
可以去除主要功能,因爲它不會在

+1

主要功能當然是在Windows服務中調用的。 – 2013-03-19 16:36:33

相關問題