2009-09-01 196 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 [])中,并将该异常记录到日志文件(如果引发一个)。我认为在创建实例时存在问题。