我创建了一个C#Windows服务,但无法启动。当我尝试启动它时,我收到以下消息:
本地计算机上的System Usage Monitor服务已启动然后停止。如果没有工作要做,某些服务会自动停止,例如,性能日志和警报服务。
以下是我的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);
}
我需要在该功能结束时阻止什么?为什么我的服务不会开始?
答案 0 :(得分:3)
你开了一个线程吗?
如果您没有执行某项操作的线程,则应用程序将关闭,因此当启动完成时没有线程(除非您在UdpBrodacaster中启动一个),因此服务将关闭。
编辑:只需声明未发出信号的ManualResetEvent
,并在其上调用线程WaitOne()
。然后在你的OnStop()信号中发出事件(.Set()
),让线程唤醒并退出,从而关闭你的服务。
答案 1 :(得分:2)
查看事件日志,如果您的服务正在启动,那么由于某种原因崩溃将导致应用程序日志中出现异常事件。
答案 2 :(得分:1)
将代码放在try-catch-Block中的OnStart(string [])中,并将异常记录到日志文件中(如果引发了一个)。我认为创建实例存在问题。