• window service 开发


    为了便于window service的调试和开发。

    我整理了一下代码,方便大家查阅


    App.config

    设置启动时间

    timerStart-10点

    interval-3600000  1小时检查一次

    isdebug-调试模式

    <!--timer-->
        <add key="timerStart" value="10" />
        <add key="interval" value="3600000" />
    <!--IsDebug-->
        <add key="IsDebug" value="true" />
    <!--Log-->
        <add key="logPath" value="D:Log" />
    



    Program

    static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            static void Main()
            {
                
                if (MyConfig.IsDebug)
                {
                    //测试
                    Service1 s = new Service1();
                }
                else
                {
                    //正式
                    ServiceBase[] ServicesToRun;
                    ServicesToRun = new ServiceBase[]
                    {
                    new Service1()
                    };
                    ServiceBase.Run(ServicesToRun);
                }
            }
        }


    Service

    public Service1()
            {
                InitializeComponent();
    //全局异常
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                //运行
                RunService();
            }
    
            System.Timers.Timer timer1 = new System.Timers.Timer(MyConfig.interval);
           
            protected override void OnStart(string[] args)
            {
                //正式
                if (!MyConfig.IsDebug)
                {
                    timer1.AutoReset = true;
                    timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
                    timer1.Enabled = true;
                }
            }
    
            private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                if (DateTime.Now.Hour == MyConfig.timerStart)
                {
                    RunService();
                }
            }
    
            public void RunService()
            {
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                LogHelper.WriteLog("  <<==开始______________________" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "______________________==>>");
    
                try
                {
                    //处理逻辑
                    DoSomeThing();
    
                    LogHelper.WriteLog("  <<==结束______________________" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "______________________==>>");
                }
                catch (Exception ex)
                {
                    LogHelper.WriteLog(ex.Message);
                    LogHelper.WriteLog(ex.StackTrace);
                    LogHelper.WriteLog("  <<==结束______________________" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "______________________==>>");
                }
                finally
                {
                    Clear();
                }
    
                
            }
    
            protected override void OnStop()
            {
                //正式
                timer1.Enabled = false;
            }
    
            void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                try
                {
                    Exception ex = e.ExceptionObject as Exception;
                    string exStr = "
    " + "
    " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ex.Message + "详细信息如下:
    "
                                        + Environment.NewLine + "[InnerException]" + ex.InnerException + "
    "
                                        + Environment.NewLine + "[Source]" + ex.Source + "
    "
                                        + Environment.NewLine + "[TargetSite]" + ex.TargetSite + "
    "
                                        + Environment.NewLine + "[StackTrace]" + ex.StackTrace + "
    ";
                    LogHelper.WriteLog(exStr);
    
                }
                catch { }
                finally { }
            }
    
    



    LogHelper

    public class LogHelper
        {
            public static readonly string logPath = ConfigurationManager.AppSettings["logPath"];
            private static readonly object writeFile = new object();
            public LogHelper() { }
    
            /// <summary>
            /// 在本地写入错误日志
            /// </summary>
            /// <param name="exception"></param> 
            public static void WriteLog(string debugstr)
            {
                lock (writeFile)
                {
                    FileStream fs = null;
                    StreamWriter sw = null;
    
                    try
                    {
                        string filename = DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
                        //服务器中日志目录
    
                        if (!Directory.Exists(logPath))
                            Directory.CreateDirectory(logPath);
                        fs = new FileStream(logPath + "/" + filename, System.IO.FileMode.Append, System.IO.FileAccess.Write);
                        sw = new StreamWriter(fs, Encoding.UTF8);
                        sw.WriteLine(DateTime.Now.ToString() + "     " + debugstr + "
    ");
                    }
                    finally
                    {
                        if (sw != null)
                        {
                            sw.Flush();
                            sw.Dispose();
                            sw = null;
                        }
                        if (fs != null)
                        {
                            //     fs.Flush();
                            fs.Dispose();
                            fs = null;
                        }
                    }
                }
            }
    
        }




  • 相关阅读:
    what's the python之异常处理
    what's the python之面向对象(进阶)
    what's the python之面向对象
    what's the python之自定义模块和包
    Java并发编程-并发工具包(java.util.concurrent)使用指南(全)
    Java之JUC系列:外部Tools
    java CS结构软件自动升级的实现
    史上最全最强SpringMVC详细示例实战教程
    搭建最简单的SpringMVC框架(使用maven)
    小心对待query_cache_size
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779767.html
Copyright © 2020-2023  润新知