2009-09-01 224 views
0

我已經創建了C#服務,但無法啓動。我嘗試啓動時收到以下消息:C#服務無法啓動

本地計算機上的系統使用情況監視器服務已啓動,然後停止。某些服務>如果他們沒有工作要做,則會自動停止,例如「性能日誌和警報」服務。

以下是我的OnStart覆蓋...

/// <summary> 
    /// OnStart(): Put startup code here 
    /// - Start threads, get inital data, etc. 
    /// </summary> 
    protected override void OnStart(string[] args) 
    { 
    base.OnStart(args); 

    broadcaster = new UdpBroadcaster(IP_Address, Port); 
    itm = new IdleTimeMonitor(1 * 1 * 3000, 1000); 
    aam = new ActiveApplicationMonitor(1000); 

    itm.IdleTimeExceeded += new IdleTimeExceededDelegate(itm_IdleTimeExceeded); 
    itm.IdleTimeReset += new IdleTimeResetDelegate(itm_IdleTimeReset); 
    itm.IdleTimeEvaluated += new IdleTimeEvaluatedDelegate(itm_IdleTimeEvaluated); 

    aam.StartedUsingApplication += new StartedUsingApplicationDelegate(aam_StartedUsingApplication); 
    aam.EndedUsingApplication += new EndedUsingApplicationDelegate(aam_EndedUsingApplication); 
    aam.ApplicationEvaluated += new ApplicationEvaluatedDelegate(aam_ApplicationEvaluated); 
    } 

我需要那個功能什麼的結束封鎖?爲什麼我的服務不會開始?

回答

2

查看事件日誌,如果您的服務正在啓動,然後由於某種原因崩潰,則應用程序日誌中將出現異常事件。

+0

如果它墜毀,將被記錄。他們收到的消息來自事件日誌。 – Spence 2009-09-01 07:18:08

+0

現貨!我的一個線程無法啓動,因爲空引用異常:) – Nippysaurus 2009-09-02 03:13:06

3

您是否啓動了一個線程?

如果您沒有線程執行某些操作,那麼應用程序將關閉,因此當onstart結束時,沒有線程(除非您在UdpBrodacaster中踢出一個線程),以便服務關閉。

編輯:只要聲明一個ManualResetEvent沒有信號,並有線程調用WaitOne()就可以了。然後在你的OnStop()發信號(.Set())使線程喚醒並退出,從而關閉你的服務。

+0

是的,我有線程...但他們未能開始。 – Nippysaurus 2009-09-02 03:13:37

1

將您的代碼放入try-catch-Block中的OnStart(string [])中,並將該異常記錄到日誌文件(如果引發一個)。我認爲在創建實例時存在問題。