检查下你的代码有没有问题。比如说,你是否在OnStart中放置了太多代码,导致启动超时。
或者你没有用线程或者循环保持住服务进程的运行,而程序自动退出。
还有代码是否丢出了异常,等等。

解决方案 »

  1.   


    应该没问题的、要不你帮我看看。。
      public LoggerService()
            {
                InitializeComponent();
            }
            static int Timespan = int.Parse(System.Configuration.ConfigurationManager.AppSettings["TimeSpan"]);
            static int ExecNumber = int.Parse(System.Configuration.ConfigurationManager.AppSettings["ExecNumber"]);        static string DBHost = System.Configuration.ConfigurationManager.AppSettings["Server"];
            static string SqsHost = System.Configuration.ConfigurationManager.AppSettings["SQSURL"].Replace("http://", "").Split(':')[0];
            System.Timers.Timer timer = new System.Timers.Timer(Timespan);
            protected override void OnStart(string[] args)
            {
                Thread.Sleep(1000);
                try
                {
                    LogWrapper logWrapper = new LogWrapper();                logWrapper.BuildLogFile("ServiceStart------------------------------", "Pause 1s", SqsHost, DBHost, "", "", "", "", "", "", "", "", "", "", "");            }
                catch
                {            }
                timer.Elapsed += new System.Timers.ElapsedEventHandler(this.Commit);
                timer.AutoReset = true;
                timer.Enabled = true;
                timer.Start();
            }        protected override void OnStop()
            {
                timer.Enabled = false;
                timer.AutoReset = false;
                timer.Stop();
                timer.Dispose();
            }        protected void Commit(object sender, ElapsedEventArgs e)
            {
                try
                {
                    if (DateTime.Now.Hour != 3)
                    {
                        ThreadPool.SetMaxThreads(350, 350);
                        using (Ping p = new Ping())
                        {
                            PingReply replysqs = p.Send(SqsHost, 1000);
                            PingReply replydb = p.Send(DBHost, 1000);
                            if (replysqs.Status == IPStatus.Success && replydb.Status == IPStatus.Success)
                            {
                                for (int i = 0; i < ExecNumber; i++)
                                {
                                    ThreadPool.QueueUserWorkItem(ExecLogger);
                                }
                            }
                            else
                            {
                                try
                                {
                                    lock (obj1)
                                    {
                                        LogWrapper logWrapper = new LogWrapper();                                    logWrapper.BuildLogFile("UnableReachNetwork", "Pause 1s", SqsHost, DBHost, "", "", "", "", "", "", "", "", "", "", "");
                                    }
                                }
                                catch
                                {                            }
                            }
                        }
                    }
                    else
                    {
                        if (DateTime.Now.Hour ==3 && DateTime.Now.Minute==0 && DateTime.Now.Second==1)
                        {
                            LogSQS log = new LogSQS();                        log.Time = "{0:yyyy-MM-dd HH:mm:ss,ffff}".FormatWith(DateTime.Now);                        log.Reset();
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogWrapper logWrapper = new LogWrapper();                logWrapper.BuildLogFile("ThreadPoolException", ex.ToString(), "", "", "", "", "", "", "", "", "", "", "", "", "");
                   
                }
            }        protected void ExecLogger(object obj)
            {            try
                {
                    LogSQS log = new LogSQS();                log.Time = "{0:yyyy-MM-dd HH:mm:ss,ffff}".FormatWith(DateTime.Now);
                    log.Receive();
                    if (log.DataKey.Count() > 0 && log.DataValue.Count() > 0)
                    {
                        using (LoggerDao logger = new LoggerDao())
                        {
                            logger.ExecLogger(log.DataKey, log.DataValue, log.Data);
                        }
                    }
                    else
                    {
                        return;
                    }
                }
                catch(Exception ex)
                {
                    try
                    {
                        //lock (obj)
                        //{
                        LogWrapper logWrapper = new LogWrapper();                    logWrapper.BuildLogFile("ExecLogger", System.DateTime.Now.ToString(),ex.Message , "", "", "", "", "", "", "", "", "", "", "", "");
                        //}
                    }
                    catch
                    {                }
                }
            }    }
    }