2016-08-14 2 views
0

私はコンソールアプリケーションプロジェクトを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デバッガからトリガされたとき、コンソールアプリケーションのメイン()内で実行されている間に同じコードがうまく働いた

+0

Windowsサービスアプリケーションはセッション0で実行され、ユーザーセッションから完全に分離されています。その場合、すべてのライブラリが動作するわけではなく、図書館のベンダーに相談する必要があります。 –

+0

@LexLiなので、上記のコード構造はうまく見えますか? Net2 SDKはリモートアクセスサーバーからのイベントを提供するので、問題の原因となるサービスのランタイム環境が本当にわかりません。 – LePhleg

+0

SKDがWindowsサービス(http://www.paxton .co.uk/Forum/posts/t794-Net2-SDK-Windows-Serviceでの使用)。 – LePhleg

答えて

0

私自身の質問に数日後に答えるために、監視のスコープを失わずにOnStart()メソッドで実行するために、シングルトンを使用した後に問題が解決されたようです。

関連する問題