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()方法中执行相同的代码工作正常。
Windows服务的应用程序运行在会话0,并从用户会话被完全隔离。因此,不是每个图书馆都可以在这种情况下工作,您需要咨询图书馆供应商。 –
@LexLi所以上面的代码结构看起来不错? Net2 SDK提供来自远程访问服务器的事件,所以我不确定其服务的运行时环境是否会导致此问题。 – LePhleg
我也可以确认SKD支持在Windows服务中运行(http://www.paxton .co.uk /论坛/职位/ t794-NET2-SDK-使用功能于Windows的服务)。 – LePhleg