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 文档:关于服务

于 2014-04-12T12:32:27.337 回答