使用 Visual C++ 將專案寫入事件記錄檔

本文說明如何使用 Microsoft .NET Framework,將您自己的專案新增至作業系統的事件記錄檔。

原始產品版本: Visual C++
原始 KB 編號: 815661

需求

Visual Studio .NET

將專案寫入事件記錄檔

事件記錄提供標準的集中式方式,讓您的應用程式記錄重要的軟體和硬體事件。 Windows 提供標準使用者介面來檢視記錄:事件檢視器。 藉由使用 Common Language Run-time EventLog 元件,您可以在本機和遠端電腦上輕鬆地連線到現有的事件記錄檔,並將專案寫入這些記錄檔。 您也可以讀取現有記錄中的專案,並建立自己的自定義事件記錄檔。 在最簡單的形式中,寫入事件記錄檔牽涉到建立範例應用程式的幾個步驟。

如果要執行這項操作,請依照下列步驟執行:

  1. 啟動 Visual Studio .NET。

  2. 建立新的 Visual C++ 受控 C++ 應用程式專案。

  3. 將下列這一行新增至程序代碼,以新增對 system.dll 的參考:

    #using <system.dll>
    
  4. using在 和 System::Diagnostics 命名空間上System使用 指示詞,讓您稍後不需要在程式代碼中限定來自這些命名空間的宣告。 您可以在任何其他宣告之前使用下列語句:

    using namespace System;
    using namespace System::Diagnostics;
    
  5. 若要寫入事件記錄檔,您必須有數項資訊:

    • 您的訊息
    • 您要寫入的記錄檔名稱, (如果記錄檔不存在,則會建立)
    • 表示事件來源的字串

    您只能使用單一事件記錄檔來註冊特定來源。 如果您想要將訊息寫入多個記錄檔,您必須定義多個來源。

    String^ sSource;
    String^ sLog;
    String^ sEvent;
    
    sSource = gcnew String("dotNET Sample App1");
    sLog = gcnew String("Application1");
    sEvent = gcnew String("Sample Event1");
    
  6. 使用 類別的 EventLog 兩個靜態方法來檢查您的來源是否存在,以及來源是否不存在,以建立與特定事件記錄檔相關聯的這個來源。 如果您指定的記錄檔名稱不存在,當您將第一個專案寫入記錄檔時,就會自動建立該名稱。 根據預設,如果您未提供記錄檔名稱給 CreateEventSource 方法,記錄檔會命名為應用程式 記錄檔。

    if(!EventLog::SourceExists(sSource)) EventLog::CreateEventSource(sSource,sLog);
    
  7. 若要將訊息寫入事件記錄檔,您可以使用靜態方法 EventLog.WriteEntry。 這個方法有數個不同的多載版本。 下列範例程式代碼示範採用來源字串和訊息) 的最簡單方法 (,以及支援指定事件標識符和事件類型 (其中一個更複雜的方法) :

    EventLog::WriteEntry(sSource,sEvent);
    EventLog::WriteEntry(sSource, sEvent, EventLogEntryType::Warning, 235);
    
  8. 儲存您的應用程式。 執行您的應用程式,然後檢查應用程式登入 事件檢視器 以查看您的新事件。

Visual C++ .NET 中的完整程式代碼清單

#include <tchar.h>
#using <system.dll>
#using <mscorlib.dll>

using namespace System;
using namespace System::Diagnostics;

int _tmain()
{
    String^ sSource;
    String^ sLog;
    String^ sEvent;

    sSource = gcnew String("dotNET Sample App1");
    sLog = gcnew String("Application1");
    sEvent = gcnew String("Sample Event1");

     if(!EventLog::SourceExists(sSource))
       EventLog::CreateEventSource(sSource,sLog);

    EventLog::WriteEntry(sSource,sEvent);
    EventLog::WriteEntry(sSource, sEvent,
    EventLogEntryType::Warning, 234);
    return 0;
}