0

私はプログラミングが初めてで、このプロジェクトは来週の火曜日に予定されています。私がやろうとしているのは、ユーザーがログオン画面で間違ったパスワードを入力すると、カムが写真を撮ることです。コードをサービスに実装しようとしましたが、エラー 1053 が表示されます。誰かがこのコードを修正できるかどうか、またはファイル ウォッチャーがコードで使用できるかどうか疑問に思っていました。助けてください!

namespace SampleWS
{
    public partial class Service1 : ServiceBase
    {

        private WebCam camera;

        public Service1()
        {
            InitializeComponent();
        }

        public void OnDebug()
        {
            OnStart(null);
        }

        protected virtual void OnPause(string[] args)
        {
            bool infinite = false;
            LogonChecker(infinite);           
        }

        protected virtual void OnContinue(string[] args)
        {
            bool infinite = true;
            LogonChecker(infinite);
        }
        protected override void OnStart(string[] args)
        {            
            bool infinite = true;
            LogonChecker(infinite);
        }

        protected override void OnStop()
        {                        
            bool infinite = false;
            LogonChecker(infinite);          
        }

        DateTime mytime = DateTime.MinValue;

        public void LogonChecker(bool infinity)
        {
            string queryString =
               "<QueryList>" +
               "  <Query Id=\"\" Path=\"Security\">" +
               "    <Select Path=\"Security\">" +
               "        *[System[(Level &lt;= 0) and" +
               "        TimeCreated[timediff(@SystemTime) &lt;= 86400000]]]" +
               "    </Select>" +
               "    <Suppress Path=\"Application\">" +
               "        *[System[(Level = 0)]]" +
               "    </Suppress>" +
               "    <Select Path=\"System\">" +
               "        *[System[(Level=1  or Level=2 or Level=3) and" +
               "        TimeCreated[timediff(@SystemTime) &lt;= 86400000]]]" +
               "    </Select>" +
               "  </Query>" +
               "</QueryList>";


            camera = new WebCam();

         while (infinity)
          {
                EventLogQuery eventsQuery = new EventLogQuery("Security", PathType.LogName, queryString);
                eventsQuery.ReverseDirection = true;
                EventLogReader logReader = new EventLogReader(eventsQuery);
                EventRecord eventInstance;
                Int32 eventexists3 = new Int32();
                EventLog mylog = new EventLog();
                for (eventInstance = logReader.ReadEvent(); null != eventInstance; eventInstance = logReader.ReadEvent())
                {

                        eventexists3 = eventInstance.Id.CompareTo(4625);

                        if (eventexists3 == 0)
                        {
                            if (eventInstance.TimeCreated.Value > mytime)
                            {
                                mytime = eventInstance.TimeCreated.Value;
                                camera.Connect();
                                Image image = camera.GetBitmap();
                                image.Save(@"D:\Audio\testimage3.jpg");
                                camera.Disconnect();
                                eventInstance = null;
                                break;
                            }             
                        }
                    EventLogRecord logRecord = (EventLogRecord)eventInstance;
                    LogonChecker(infinity);
               }
            }
        }
    }
}
4

1 に答える 1

0

私のコメントにもかかわらず、これは簡単です。エラー 1053 の意味を確認します

ERROR_SERVICE_REQUEST_TIMEOUT

1053 (0x41D)

サービスは開始要求または制御要求にタイムリーに応答しませんでした。

ServiceBaseなどのメソッドのオーバーライドはOnStart、できるだけ早く返す必要があります。進行中の作業を実行する場合は、イベントをサブスクライブするか、ワーカー スレッドを起動します。

MSDN の .NET ドキュメントでは、サービスの実行モデルについてあまり詳しく説明されていません。そのため、Win32 ドキュメントのAbout Servicesを参照する必要があります。

于 2014-04-12T12:32:27.337 に答える