WindowsサービスでEventLogコンポーネントを使用してログを記録する

9196 ワード

1.Services 1.csファイルのデザインウィンドウにツールEventLogを追加
 private static Timer timer = new Timer();
        public Service1()
        {
            InitializeComponent();
               if (!System.Diagnostics.EventLog.SourceExists("MySource"))
           {
                 System.Diagnostics.EventLog.CreateEventSource(
                    "MySource", "MyNewLog");
           }
               eventLog1.Source = "MySource";
               eventLog1.Log = "MyNewLog";
 
        }

        protected override void OnStart(string[] args)
        {
              // TODO:             。  
            //   Timers
            timer.Interval = 12000;

            eventLog1.WriteEntry("      ");

          
                  String s = System.DateTime.Now.ToString();  
                if(!File.Exists(@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt"))  
                {
                     StreamWriter sr = File.CreateText(@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt");  
                       sr.WriteLine("-------------------------START SRV---------------------");  
                       sr.WriteLine ("      {0}    ",s);  
                      sr.WriteLine ("       {0} or     {1},  .",1, 4.2);
                      sr.Close(); 
               }  
                  else 
               {  
                      StreamWriter sr = File.AppendText(@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt");  
                      sr.WriteLine("-------------------------START SRV---------------------");  
                      sr.Close();  
                 }

                timer.Enabled = true;
                timer.Start();
                timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);



        }

        void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            using (StreamWriter sw=File.AppendText (@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt"))
            {
                sw.WriteLine("----------------"+DateTime.Now.ToString ()+"---------------------"+"\r
"); eventLog1.WriteEntry("------------- -----------------------"); } } protected override void OnStop() { // TODO: 。 // timer.Enabled = false; timer.Stop(); eventLog1.WriteEntry(" "); String s1 = System.DateTime.Now.ToString(); if (!File.Exists(@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt")) { StreamWriter sr = File.CreateText(@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt"); sr.WriteLine("-------------------------STOP SRV---------------------"); sr.WriteLine (" {0} ",s1); sr.Close(); } else { StreamWriter sr = File.AppendText(@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt"); sr.WriteLine("-------------------------STOP SRV---------------------"); sr.WriteLine (" {0} ",s1); sr.Close(); } } }

にある
  public Service1()
        {
            InitializeComponent();
               if (!System.Diagnostics.EventLog.SourceExists("MySource"))
           {
                 System.Diagnostics.EventLog.CreateEventSource(
                    "MySource", "MyNewLog");
           }
               eventLog1.Source = "MySource";
               eventLog1.Log = "MyNewLog";
 
        }

のサービス1のコンストラクション関数で  イベントソースが既に存在するかどうかを判断MySource EventLogを指定した属性SourceとLogが存在する場合  この2つのプロパティはカスタマイズされています  存在しないで作成 System.Diagnostics.EventLog.CreateEventSource(                     "MySource", "MyNewLog");
                  ここではイベントソースMySourceはコードを書く必要はありません.カスタム文字列です.   イベントビューア  下  Windowsログの下
          アプリケーションに表示  日記の出所は私たちがカスタマイズしたMySourceです 
         システム        (このサービスをアンインストールすると、Eventlogソースのログがあり、タスクタイプはログクリア[コンポーネントを追加してeventlogプロパティを設定すると、このサービスをアンインストールしたときにログをクリアするかどうかを示すプロパティが表示されます])
                      このソースがEventlogのログを開く         情報を表示  MyNewLogログファイルがクリアされました
 
 
そしてOnStart()とOnStop()メソッドで自分の論理コードを書きます
サービスがオンまたはオフの場合    eventlog 1.WriteEntity(「ここではログに書き込むカスタムコンテンツ」)
タイマーで一定時間おきにステータスを報告することもできます  ,
2,Services 1.Designer.csファイルでのvsサービス作成時に自動的に生成されるコード  
 partial class Service1
    {
        /// <summary> 
        ///         。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        ///            。
        /// </summary>
        /// <param name="disposing">         ,  true;    false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region           

        /// <summary> 
        ///            -   
        ///                。
        /// </summary>
        private void InitializeComponent()
        {
            this.eventLog1 = new System.Diagnostics.EventLog();
            ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();
            // 
            // Service1
            // 
            this.CanPauseAndContinue = true;
            this.CanShutdown = true;
            this.ServiceName = "MyWindowsService";
            ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();

        }

        #endregion

        private System.Diagnostics.EventLog eventLog1;

    }

  
にある コンポーネントデザイナで生成されたコード  中
   #region           

        /// <summary> 
        ///            -   
        ///                。
        /// </summary>
        private void InitializeComponent()
        {
            this.eventLog1 = new System.Diagnostics.EventLog();
            ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();
            // 
            // Service1
            // 
            this.CanPauseAndContinue = true;
            this.CanShutdown = true;
            this.ServiceName = "MyWindowsService";
            ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();

        }

        #endregion

追加 //           //Service1            //         
   this.CanPauseAndContinue = true;   //サービスは一時停止して続行できますか?      
    this.CanShutdown = true;     //システム停止時通知サービス
        this.ServiceName = "MyWindowsService";//サービス名の指定  サービスを作成するプロジェクト名
 
3、生サービスコンポーネント  Services 1.csで右クリック 
インストーラの追加
「eventlogコンポーネント」をクリックします.  右クリック
インストーラの追加
ProjectInstaller.csファイルの生成
4,ProjectInstaller.csファイル  コンポーネントを選択  右クリックしてプロパティを設定
            ServiceInstaller 1のServiceNameはMyWindowsService
 
                                  StartTypeで  Manual手動を起動する方法を設定します  Automatic自動
             ServiceProcessInstaller 1のAccountアカウントタイプは  LocaSystem  ローカルアカウント
 
5、コンパイル  生成 
 
6、インストールサービス