3

私は、イベントログに書き込むアプリケーション監視サービスを構築しているので、コンピューターが使用されている頻度に関する一般的なアイデアを得ることができます。サービスをインストールできますが、実行しようとすると次のエラーが発生します。

「ローカルコンピューターのアプリケーションモニターサービスが開始されてから停止しました。パフォーマンスログやアラートサービスなど、実行する作業がない場合、一部のサービスは自動的に停止します。」

whileループ、マウスアクティビティなどを試しましたが、終了し続けます。私に何ができるかについて何かアイデアはありますか?

    public ApplicationMonitor()
    {
        InitializeComponent();
        if (!System.Diagnostics.EventLog.SourceExists("Activity Usage"))
        {
            System.Diagnostics.EventLog.CreateEventSource("Activity Usage", "Computer Log");
        }

        eventLog1.Source = "Activity Usage";
        eventLog1.Log = "Computer Log";
    }

    protected override void OnStart(string[] args)
    {
        eventLog1.WriteEntry("In OnStart");
    }

    protected override void OnStop()
    {
        eventLog1.WriteEntry("In onStop.");
    }

    protected override void OnContinue()
    {
        eventLog1.WriteEntry("In OnContinue.");
    }
4

1 に答える 1

3

アクティブなスレッドがないためです。

サービスの「OnStart」メソッドでポーリングを実行するスレッドを開始する必要があります。それ以外の場合、OnStartメソッドが完了すると、アプリケーションにアクティブなスレッドがなく、.NetCLRによってアプリが閉じられます。

スレッドが単に30秒ごとにスレッドスリープを実行している場合でも、アプリを開いたままにするには、スレッドが生きている必要があります。

于 2012-08-16T23:08:43.243 に答える