2010-12-14 33 views
1

我寫了,安裝,併成功地啓動了Windows服務在C#,什麼都不做:)最初我只想回聲的東西到控制檯,分貝查詢服務使等我使用OnStart在我的服務,但是當我做一個網絡啓動「我的服務」時,這些消息顯示在哪裏,從cmd提示符?c#Windows服務控制檯.Writeln

我打開更好的方法。我是新來的,並通過迴應控制檯我的進度來逐步感受我的方式。我應該回應事件日誌嗎?我該怎麼做呢?(我知道,我知道,google一下)

protected override void OnStart(string[] args) 
    { 
     base.OnStart(args); 
     Console.WriteLine("Sham-Wow!"); 
    } 
+0

爲什麼不穀歌呢? – bevacqua 2010-12-14 15:04:49

+3

@Nico:Stackoverflow不會鼓勵「去谷歌它」和RTFM。該網站也打算回答常見問題。這提醒了我,有沒有一個C#常見問題? – 2010-12-14 15:15:23

+0

RTFM,我沒有聽說過。多麼偉大的首字母縮略詞。 – rd42 2010-12-14 16:15:47

回答

6

您無法從Windows服務編寫控制檯。

我推薦你使用任何日誌工具,如log4net

第二種方案被寫入Event LogSystem.Diagnostics.EventLog

+0

感謝命名空間! – rd42 2010-12-14 16:12:48

3

如果你想運行你的應用程序作爲控制檯應用程序(這樣你就可以看到你的控制檯輸出),或者作爲一個服務,你可以用下面的實現這一目標:

  • 確保您的應用程序編譯爲控制檯應用程序。
  • 改變應用程序的Main方法,以便您可以分支執行服務或控制檯。
  • 按如下方式運行您的應用程序以獲得控制檯「myservice.exe/console」。

它已經多年,因爲我已經做到了這一點所以可能需要一些調整,但類似如下:

static void Main(string[]] args) 
{ 
    if (args.Length == 0) 
    { 
      //Service entry 
      System.ServiceProcess.ServiceBase[] services; 
      services = new System.ServiceProcess.ServiceBase[] { new WinService1() }; 
      System.ServiceProcess.ServiceBase.Run(services); 
    } 
    else 
    { 
      //Console entry 
      OnStart(args); 
    } 
} 

protected override void OnStart(string[] args) 
{ 
    base.OnStart(args); 
    Console.WriteLine("Sham-Wow!"); 
} 

這是罰款,一些早期的實驗,但我會建議log4net的,一旦你已經得到了你的腦袋周圍的事情。

1

傳遞服務狀態的最常見/可接受的方式是寫入Windows事件日誌。

爲了便於調試,我建議您將所有業務代碼放入服務組件的單獨類中。然後,您可以從您的服務或控制檯應用程序中使用該類。在創建服務時,您將使用控制檯應用程序託管組件,以便您可以輕鬆地插入代碼。