3

私のコードはすべて、この時点まで正常に動作します。

using System.Diagnostics;

namespace WebPortalLogging
{
    public static class EventLogging
    {
    public static void LogEvent(string origin, string message, EventLogEntryType eventLogEntryType, int eventId)
        {
      const string source = "Software";
            const string log = "Application";

            if (!EventLog.SourceExists(source))
                 EventLog.CreateEventSource(source, log);
      EventLog.WriteEntry(source, message, eventLogEntryType, eventId);      
        }
    }
}

このクラスを別のプロジェクトでも使用していますが、問題なく動作します。この行に到達すると:

if (!EventLog.SourceExists(ソース)) EventLog.CreateEventSource(ソース, ログ);

この行にヒットして終了します。

これが私の出力の内容です:

The thread 'vshost.NotifyLoad' (0x28c) has exited with code 0 (0x0).
The thread 'vshost.LoadReference' (0x470) has exited with code 0 (0x0).
'VmBackup.vshost.exe' (Managed (v4.0.30319)): Loaded 'D:\Google Drive\Code\VMBackup\VMBackup\bin\Debug\VmBackup.exe', Symbols loaded.
'VmBackup.vshost.exe' (Managed (v4.0.30319)): Loaded 'D:\Google Drive\Code\VMBackup\VMBackup\bin\Debug\WebPortalLogging.dll', Symbols loaded.
The thread '<No Name>' (0xa44) has exited with code 0 (0x0).
'VmBackup.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
The thread '<No Name>' (0x107c) has exited with code 0 (0x0).
The thread '<No Name>' (0x1838) has exited with code 0 (0x0).
The thread 'vshost.RunParkingWindow' (0xa78) has exited with code 0 (0x0).
The thread '<No Name>' (0x10e0) has exited with code 0 (0x0).
The program '[6436] VmBackup.vshost.exe: Program Trace' has exited with code 0 (0x0).
The program '[6436] VmBackup.vshost.exe: Managed (v4.0.30319)' has exited with code 0 (0x0).

EventLog.WriteEntry には到達しません。イベントログにも出力されていません。VS2010 を再起動しましたが、解決しませんでした。すべてのエラーでプロンプトをオンにしました。

私は何が欠けていますか?

4

2 に答える 2

5

まず、EventLogにソースがない場合にEventLogがエントリを書き込む必要があるかどうかが少し不明確であるため、条件を中かっこで囲みます。

if (!EventLog.SourceExists(source)) 
{
   EventLog.CreateEventSource(source, log); 
}

  EventLog.WriteEntry(source, message, eventLogEntryType, eventId);  

try/catchまた、プログラムをランダムに終了させる未処理の例外が発生するかどうかを確認するために、ブロックでラップしてみてください。

try {

     if (!EventLog.SourceExists(source)) 
     {
           EventLog.CreateEventSource(source, log);
     }

     EventLog.WriteEntry(source, message, eventLogEntryType, eventId);  

} catch (Exception e)
  {
     Console.WriteLine(e);
  }

追加:スレッド'vshost.NotifyLoad' (0x28c) has exited with code 0 (0x0)。スレッド'vshost.LoadReference' (0x470) has exited with code 0 (0x0)。エラーではありません。Visual Studioは、バックグラウンドスレッドが終了したことを通知しています。0は、スレッドが正常に実行されたことを示します。

于 2012-10-09T15:43:38.363 に答える
0

管理者権限が必要なため、eventLog Source を作成して例外をスローしようとしていると思われます。

于 2012-10-09T15:44:09.993 に答える