私はコンソールアプリケーションプロジェクトをWindowsサービスに変換しようとしています。イベントハンドラをWindowsサービスに配置する場所はどこですか?
私のダミーのコンソールアプリケーションプロジェクトは、サードパーティのAPI(NET2 sdk)からのイベントにアクセスしていて、その情報をコンソールに表示していました。私はWindowsサービスとしてバックグラウンドで実行するように変換したいと思います。
しかし、私はイベントハンドラを "生きている"状態に保つのに苦労しているので、サービスの実行中にアクセスイベントをキャプチャしています。撮影するイベントがある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);
}
上記のコード結果:
現在私はこのようなONSTART()関数内に配置されています。
PS:メインスレッドが生き続けるのVisual Studioデバッガからトリガされたとき、コンソールアプリケーションのメイン()内で実行されている間に同じコードがうまく働いた。
Windowsサービスアプリケーションはセッション0で実行され、ユーザーセッションから完全に分離されています。その場合、すべてのライブラリが動作するわけではなく、図書館のベンダーに相談する必要があります。 –
@LexLiなので、上記のコード構造はうまく見えますか? Net2 SDKはリモートアクセスサーバーからのイベントを提供するので、問題の原因となるサービスのランタイム環境が本当にわかりません。 – LePhleg
SKDがWindowsサービス(http://www.paxton .co.uk/Forum/posts/t794-Net2-SDK-Windows-Serviceでの使用)。 – LePhleg