WindowsサービスでEventLogコンポーネントを使用してログを記録する
9196 ワード
1.Services 1.csファイルのデザインウィンドウにツールEventLogを追加
にある
のサービス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サービス作成時に自動的に生成されるコード
にある コンポーネントデザイナで生成されたコード 中
追加 // //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、インストールサービス
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、インストールサービス