2016-08-14 89 views
0

我想一个控制台应用程序项目转换为Windows服务。事件处理程序应放在Windows服务中的位置?

我的虚拟控制台应用程序项目,听取来自第三方API(NET2 sdk)访问事件,并打印他们的信息,以安慰。我想将它转换为Windows服务在后台运行。

但是我在困难时期保持事件处理程序“活着”,所以它使服务运行时捕捉访问事件。

目前我已经把它的调用onStart()函数中是这样的:在从未触发Net2AccessEvent方法

Net2 net2; 

public Net2MonitoringService() 
{ 
    InitializeComponent(); 
    eventLog1 = new System.Diagnostics.EventLog(); 
    if (!System.Diagnostics.EventLog.SourceExists("Net2 Monitoring Service")) 
    { 
     System.Diagnostics.EventLog.CreateEventSource(
      "Net2 Monitoring Service", "Net2 Monitoring Log"); 
    } 
    eventLog1.Source = "Net2 Monitoring Service"; 
    eventLog1.Log = "Net2 Monitoring Log"; 
} 

    protected override void OnStart(string[] args) 
    { 
     eventLog1.WriteEntry("Net2 Monitoring Service has started."); 
     net2 = new Net2(); 
     net2.Login(); 

     //Monitor main door events 
     net2.client.MonitorAcu(1172079); 
     eventLog1.WriteEntry("Monitoring door #1172079. Listening for events...", EventLogEntryType.Information); 

     //Create an event handler to handle the access event 
     net2.client.Net2AccessEvent += new OemClient.Net2AcuEventHandler(Net2AccessEvent); 
    } 

    protected override void OnStop() 
    { 
     net2.Logout(); 
     eventLog1.WriteEntry("Net2 Monitoring Service has stopped."); 
    } 

    private void Net2AccessEvent(object sender, IEventView e) 
    { 
     //Print access event details to log 
     string message = "Access event triggered:\n" + 
      "UserId: " + e.UserId.ToString() + "\n" + 
      "EventId: " + e.UserId.ToString() + "\n" + 
      "Address: " + e.UserId.ToString() + "\n" + 
      "SubAddress: " + e.UserId.ToString() + "\n" + 
      "EventDateTime: " + e.UserId.ToString() + "\n"; 
     eventLog1.WriteEntry(message, EventLogEntryType.SuccessAudit); 
    } 

上面的代码的结果,即使存在要被捕获的事件。


PS:而从Visual Studio调试器,保持主线程活着时触发控制台应用程序的Main()方法中执行相同的代码工作正常。

+0

Windows服务的应用程序运行在会话0,并从用户会话被完全隔离。因此,不是每个图书馆都可以在这种情况下工作,您需要咨询图书馆供应商。 –

+0

@LexLi所以上面的代码结构看起来不错? Net2 SDK提供来自远程访问服务器的事件,所以我不确定其服务的运行时环境是否会导致此问题。 – LePhleg

+0

我也可以确认SKD支持在Windows服务中运行(http://www.paxton .co.uk /论坛/职位/ t794-NET2-SDK-使用功能于Windows的服务)。 – LePhleg

回答

0

为了在几天后回答我自己的问题,在使用单例避免丢失监视范围并在OnStart()方法上运行它之后,问题似乎得到解决。

相关问题