2017-02-13 45 views
0

Windowsでこのログオンイベントを検出できません。ここでC#でOnSessionChangeを使用してWindowsログオンイベントを検出する方法

は私のコードです:

namespace ConsoleApplication2 
{ 

    public class MyService: ServiceBase 
    { 
     public MyService() 
     { 
      CanPauseAndContinue = true; 
      CanHandleSessionChangeEvent = true; 
     } 

     protected override void OnSessionChange(SessionChangeDescription changeDescription) 
     { 
      base.OnSessionChange(changeDescription); 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyService tpl = new MyService(); 
      Thread t = new Thread(delegate() 
      { 
       while (true) { } 
      }); 
      t.Start(); 
     } 
    } 
} 

私は私のラップトップには、このアプリをして、リモートデスクトップを実行してテストするにはどうすればよいですか?私はWindows EventViewerで生成されたイベントを見ることができますが、OnSessionChangeは決して呼び出されません(私はブレークポイントを内部に追加しました)。

私のコードが間違っているか、間違ってテストしていますか?

+0

あなたのラップトップではコードを作成するのではなく、スケジュールされたタスクの一部としてログインするための応答として追加することをお勧めします(Windows 10の場合はシンチ)。これを追加してログイン時に実行します。それは正確には..あなたはそれを検出する必要はありません – BugFinder

+0

私はWindows 7でこれをテストしていますが、XPでも実行する必要があるので、私はちょっとコードを使用して検出する必要があります。 – Kobe

+0

ブー..うん、いい計画です。あなたがあなたのために働いていない場合は、イベントログを監視することができます..あなたのアプリはサービスとして実行されていますか? – BugFinder

答えて

1

通常、複数の同時リモートデスクトップセッションは、いずれのWindowsデスクトップシステムでも許可されていません。だから、RDPを使って別のユーザーとしてログインすると、あなたはこれをハッキングしたと思っているのですが、Windowsサーバーを使っていると思います(これはXPを除外します)。

それにもかかわらず、システムにログインしている各ユーザーは、独自のアプリケーションを実行し、各アプリケーションセットはそのユーザーに固有です。したがって、App1は各ユーザーによって独立して実行できます。

これは、コンソールアプリケーションがログオンしている他のユーザーを検出できないことを意味します。

これを行うには、Windowsサービスを使用する必要があります。これはバックグラウンドで実行され、複数のユーザーを検出して作業し、ログインとログアウトも検出できます。 this SO link

MyServiceServiceBaseから継承する目的です。アプリケーションをサービスとして実行していない場合は、正しく実行されていません。

最初にinstall your application as a serviceにしてからサービスのように実行する必要があります。

あなたは、アプリケーションがサービスとして実行できるとは思わないと言います。理由は分かりませんが、そうであれば、起動/ログイン時にアプリケーションを実行するためのスクリプトを作成する必要があります。

この方法では、誰かがログインするたびにアプリケーションが実行されます。とにかくこれはあなたのために簡単かもしれません。

関連する問題