EventLog.WriteEntry メソッドで出力可能な最大文字数が Windows のバージョンによって異なる

現象
.NET Framework System.Diagnostics.Eventlog.WriteEntry メソッドのリファレンスには、出力文字列が 32766 バイトを超えると ArgumentException が発生すると記載されていますが、それより短い文字列を出力した場合に Win32Exception が発生することがあります。

  EventLog.WriteEntry メソッド (String)
  http://msdn.microsoft.com/ja-jp/library/xzwc042w.aspx

原因
この現象は、EventLog.WriteEntry メソッドが内部で呼び出している Win32 API ReportEvent 関数の制限に依存して発生します。
ReportEvent 関数の第 8 引数 lpStrings で指定する文字列には制限長があり、この制限を超える場合に本件現象が発生します。

  ReportEvent function
  http://msdn.microsoft.com/en-us/library/aa363679.aspx

上記技術情報に記載のとおり、その制限値は、Windows Vista より前のバージョンの Windows では 32K すなわち 32,768 文字、Windows Vista 以降では 31,839 文字となっています。
この ReportEvent 関数の制限値と WriteEntry メソッドの制限値との大小関係から、WriteEntry メソッドで出力可能な最大文字数は、以下のとおりとなります。

  Windows Vista より前のバージョン (Windows XP, Windows Server 2003 等)
  32766 文字 (EventLog.WriteEntry メソッドの制限に従います)

  Windows Vista 以降のバージョン (Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2 等)
  31839 文字 (ReportEvent 関数の制限に従います)

環境により、上記制限長を超える文字列の出力が可能な場合もあることが確認されておりますが、WriteEntry メソッドとして動作を保証している制限長は、上記のとおりです。
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2845601 - 最終更新日: 09/29/2016 14:56:00 - リビジョン: 3.0

Microsoft .NET Framework 1.0, Microsoft .NET Framework 1.0 Service Pack 3, Microsoft .NET Framework 1.1, Microsoft .NET Framework 1.1 Service Pack 1, Microsoft .NET Framework 2.0, Microsoft .NET Framework 2.0 Service Pack 1 (x86), Microsoft .NET Framework 2.0 Service Pack 2, Microsoft .NET Framework 3.0, Microsoft .NET Framework 3.0 Service Pack 1, Microsoft .NET Framework 3.0 Service Pack 2, Microsoft .NET Framework 3.5, Microsoft .NET Framework 3.5 Service Pack 1, Microsoft .NET Framework 3.5.1, Microsoft .NET Framework 4.0, Microsoft .NET Framework 4.5

  • KB2845601
フィードバック