Gewusst wie: Erstellen von Protokolldateien

Aktualisiert: November 2007

Sie können Protokolldateien mit Diagnoseinformationen zur Interoperabilität, zum Laden des Programms und zum Netzwerk erstellen. Zum Aktivieren der Protokollierung legen Sie die Registrierungsschlüssel fest. Legen Sie zunächst einen Registrierungsschlüssel zum Aktivieren der allgemeinen Protokollierung und anschließend die Registrierungsschlüssel für die gewünschte Protokollierungskomponente und die entsprechenden Optionen fest.

Sie können die folgenden Methoden zum Festlegen von Registrierungsschlüsseln verwenden:

  • Verwenden Sie den Remote Registry Editor in Visual Studio.

  • Verwenden Sie im .NET Compact Framework 2.0 Service Pack 1 die Protokollierungsoptionen in Remote Performance Monitor. Weitere Informationen über den Remote Performance Monitor finden Sie unter Gewusst wie: Überwachen der Leistung zur Laufzeit.

  • In .NET Compact Framework 3.5 können Sie das Protokollierungstool NetCFLogging.exe verwenden, das eine einfache grafische Benutzeroberfläche zum Aktivieren und Deaktivieren der Protokollierung bereitstellt. Dieses Tool ist in den Power Toys für .NET Compact Framework enthalten. Weitere Informationen finden Sie unter Power Toys for .NET Compact Framework.

  • Verwenden Sie die Registry-Klasse und die RegistryKey-Klasse, die in .NET Compact Framework Version 2.0 und höheren Versionen unterstützt werden.

Die Protokolldateien sind in der folgenden Tabelle zusammengefasst.

Protokollierungskomponente

Inhalt der Protokolldatei

Interop

Protokolliert COM-Interop-Aufrufe. Stellt Informationen zu Plattformaufrufen und Marshalling bereit.

Fehler

Protokolliert alle nicht behandelten und systemeigenen Ausnahmen. Fehler werden in einer Protokolldatei und in OutputDebugString protokolliert. Die Protokolldatei wird für jede Assembly im aktuellen Pfad erstellt und bezieht sich auf die aktuelle Sitzung. Nach dem ersten Auftreten einer nicht behandelten oder systemeigenen Ausnahme wird die Protokolldatei überschrieben.

Loader

Protokolliert Informationen über das Laden des Programms. Dieser Dateiheader enthält die folgenden Informationen:

  • Den Anwendungsnamen.

  • Die Prozess-ID (wie von Windows Embedded CE vorgegeben).

  • Das lokale Datum und die lokale Uhrzeit, zu denen die Protokolldatei erstellt wurde. Das Format ist nicht global oder kulturspezifisch.

  • .NET Compact Framework-Version, z. B. 2.0.5021.00.

  • Plattformbezogene Informationen, z. B. Windows Embedded CE v5.0.1400 (CEPC) WinCE5x86 Debug Dev i386 IJITv2.

Die Datei enthält die folgenden Informationen:

  • Den Umwandlungszustand (Kompatibilitätsmodus).

  • Die Vertrauensebene, die Modulen beim Laden zugewiesen wird.

  • Fehler beim Auflösen einer Methode.

  • Fehler beim Auflösen eines Typs.

  • Fehler beim Auffinden oder Laden einer Assembly oder eines Moduls.

  • Erfolg beim Laden einer Assembly.

  • Ungültige Metadatenversion.

  • Fehler bei der Suche nach einer DLL für einen Plattformaufruf.

  • Fehler bei der Suche nach einer Funktion innerhalb der DLL für den Plattformaufruf.

  • Name der Richtliniendatei oder Hinweis, dass diese nicht vorhanden ist.

  • Schwerwiegende Fehler bei der Verarbeitung der Richtliniendatei.

  • Richtlinienbasierte Umleitung der verwalteten Assemblys.

Sie können auch Informationen über den globalen Assemblycache einschließen.

Networking

Protokolliert den Netzwerkverkehr. Die Netzwerkprotokolldatei ist binär, sodass ohne den .NET Compact Framework-Protokoll-Viewer, Logviewer.exe, nicht darauf zugegriffen werden kann. In .NET Compact Framework 3.5 und höher ist der Protokoll-Viewer in den Power Toys für .NET Compact Framework enthalten. Weitere Informationen finden Sie unter Power Toys for .NET Compact Framework.

Da die Netzwerkprotokollierung auf der Windows Sockets-Ebene erfolgt, enthält die Protokolldatei nur Informationen über Netzwerkpakete. Dazu gehören die über das Netzwerk gesendeten Daten, die sensibel sein können, falls sie nicht verschlüsselt sind.

Finalizer

Protokolliert den Klassennamen von Objekten, die nicht freigegeben wurden, bevor sie vom Garbage Collector verworfen wurden. Dieses Protokoll wird in .NET Compact Framework 3.5 und höheren Versionen unterstützt.

Die Objektnamen sind im Protokoll nicht enthalten, da die Namen für die Common Language Runtime (CLR) nicht verfügbar sind. Die Klassennamen nicht freigegebener Objekte können jedoch bei der Identifizierung dieser Objekte helfen. Nicht freigegebene Objekte können in Anwendungen zu Leistungseinbußen führen.

Hinweis:
In einigen Fällen wird der Finalizer von .NET Compact Framework statt vom Anwendungscode aufgerufen.

Diese Datei enthält die folgenden Informationen:

  • Den Zeitstempel, der angibt, wann der Finalizer den Garbage Collector für das Objekt ausgeführt hat.

  • Die Klasse des abgeschlossenen Objekts.

Trace

Protokolliert Ausnahmen im Code für Windows Communication Foundation (WCF). Auf dem Desktop unterstützt .NET Framework drei Arten der Protokollierung: Ablaufverfolgung, Messaging und Ereignisprotokollierung. WCF auf .NET Compact Framework unterstützt nur die Ablaufverfolgungsprotokollierung zur Verfolgung von Codeausnahmen. Warn- und Fehlermeldungen werden jedoch nicht protokolliert.

Dieses Protokoll wird in .NET Compact Framework 3.5 und höheren Versionen unterstützt.

Standardmäßig werden Protokolldateien in das Verzeichnis geschrieben, das auch die Anwendung enthält, für die die Diagnose erstellt wird. Sie können jedoch mithilfe von Registrierungsschlüsseln auch einen anderen Pfad und weitere Optionen angeben. Dabei haben Sie folgende Möglichkeiten:

  • Verwenden Sie einen alternativen Pfad für die Protokolldateien. Dies erfordert privilegierten Zugriff auf die sichere Registrierung.

  • Schließen Sie den Anwendungsnamen in den Namen der Protokolldatei ein.

  • Schließen Sie die Prozess-ID in den Namen der Protokolldatei ein.

Der Name einer Protokolldatei ist in die folgenden Teile gegliedert, wobei die Komponente als "Interop", "Error", "Loader", "Network", "Finalizer" oder "Trace" angegeben wird:

netcf_application-name_Komponente_processID.log

Der Anwendungsname und die Prozess-ID sind optional und basieren auf Registrierungseinstellungen.

Beispielsweise könnte eine Ladeprogrammprotokolldatei für eine Anwendung mit dem Namen MyApp.exe wie folgt genannt werden:

netcf_MyApp_Loader_2066923010.log

Informationen zum Überprüfen von Protokolldateien, wie z. B. die Interop- oder Loader-Protokolldatei, finden Sie unter Protokolldateiinformationen.

So aktivieren Sie die Protokollierung

  • Legen Sie den Wert des folgenden Schlüssels Enabled auf 1 fest:

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Enabled

    Dieser Schlüsselwert muss festgelegt werden, um die sechs Typen der Protokollierung zu aktivieren: Interop, Loader, Error, Networking, Finalizer und Trace. Beachten Sie, dass die Unterschlüssel unter Logging standardmäßig nicht vorhanden sind.

    Sie können die Protokollierung vollständig deaktivieren, indem Sie diesen Wert auf 0 (null) festlegen.

So geben Sie einen Pfad für die Protokolldatei an (optional)

  • Legen Sie den Wert des folgenden Schlüssels Path auf eine Zeichenfolge fest, die den Speicherort für die Protokolldateien darstellt:

    HKLM\Security\.NETCompactFramework\Diagnostics\Logging\Path

    Auf diesen Schlüssel können nur Anwendungen zugreifen, die in die sichere Registrierung schreiben können. Wenn kein Pfad angegeben wird, wird die Protokolldatei in das Verzeichnis geschrieben, in dem auch die Anwendung enthalten ist.

So schließen Sie die Anwendung in den Namen ein (optional)

  • Legen Sie den Wert des folgenden Schlüssels UseApp auf 1 fest:

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\UseApp

    Dieser Schlüssel ist nützlich, wenn Sie mehrere Anwendungen ausführen und separate Protokolldateien für die einzelnen Anwendungen erstellen möchten. Wenn zwei Anwendungen Protokolldateien in dasselbe Verzeichnis schreiben, wird bei Ausführung der zweiten Anwendung immer die ältere Protokolldatei durch die neuere überschrieben. Der Schlüssel UseApp kann zum Differenzieren der Protokolldateien verwendet werden.

So schließen Sie die Prozess-ID in den Namen ein (optional)

  • Legen Sie den Wert des folgenden Schlüssels UsePid auf 1 fest:

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\UsePid

    Dieser Schlüssel ist nützlich, wenn Sie eine Anwendung mehrere Male ausführen und separate Protokolldateien für die einzelnen Instanzen erstellen möchten. Durch diese Einstellung wird dem Namen der Protokolldatei die Prozess-ID hinzugefügt, sodass bei jeder Instanz der Anwendung eine neue Protokolldatei mit einem anderen Namen erstellt wird.

So protokollieren Sie Ereignisse sofort nach dem Auftreten (optional)

  • Legen Sie den Wert des folgenden Schlüssels Flush auf 1 fest:

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Flush

    Dieser Wert bewirkt, dass die Common Language Runtime (CLR) Ereignisse sofort nach dem Auftreten in die Protokolldatei schreibt, statt diese im Puffer zu abzulegen und erst in das Protokoll zu schreiben, wenn der Puffer voll ist. Diese Einstellung wirkt sich nachteilig auf die Anwendungsleistung aus und kann das Timing der Anwendung geringfügig verändern. Sie kann jedoch für Diagnoseprobleme im Zusammenhang mit Anwendungsfehlern oder anderen Fehlern hilfreich sein, bei denen die letzten wenigen Ereignisse, die zum Fehler geführt haben, angezeigt werden sollen. Wenn dieser Schlüssel nicht vorhanden oder nicht festgelegt ist, werden Daten erst in die Protokolldateien geschrieben, wenn der Puffer voll ist.

Interop-Protokollierung

So aktivieren Sie die Interop-Protokollierung

  • Legen Sie den Wert des folgenden Schlüssels Enabled auf 1 fest:

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Interop\Enabled

Fehlerprotokollierung

So aktivieren Sie die Fehlerprotokollierung

  • Legen Sie den folgenden Wert von Enabled auf 1 fest:

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Error\Enabled

Ladeprogrammprotokollierung

So aktivieren Sie die Ladeprogrammprotokollierung

  • Legen Sie den folgenden Wert von Enabled auf 1 fest, um die Protokollierung für das Ladeprogramm zu aktivieren, oder auf 2, um die Protokollierung für das Ladeprogramm und den globalen Assemblycache zu aktivieren.

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Loader\Enabled

Netzwerkprotokollierung

So aktivieren Sie die Netzwerkprotokollierung

  • Legen Sie den folgenden Wert von Enabled auf 1 fest:

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Networking\Enabled

    Die Netzwerkprotokolldatei ist eine Binärdatei, die ohne den .NET Compact Framework-Protokoll-Viewer, Logviewer.exe, der das Protokoll vom Binärformat in lesbares Format übersetzt wird, nicht gelesen werden kann. In .NET Compact Framework 3.5 und höher ist der Protokoll-Viewer in den Power Toys für .NET Compact Framework enthalten. Sie können dieses Tool von der .NET Compact Framework-Downloadseite herunterladen.

Finalizerprotokollierung

So aktivieren Sie die Finalizerprotokollierung

  • Legen Sie den folgenden Wert von Enabled auf 1 fest:

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Finalizer\Enabled

Ablaufverfolgungsprotokollierung

So aktivieren Sie die WCF-Ablaufverfolgungsprotokollierung

  • Legen Sie den folgenden Wert von Enabled auf 1 fest:

    HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\WCF\Enabled

Beispiel

Sie können Werte für Registrierungsschlüssel mit dem Remote Registry Editor festlegen oder eine Anwendung schreiben, durch die die Werte festgelegt werden. Das Beispiel in diesem Abschnitt enthält die folgenden Methoden, durch die die erforderlichen Registrierungsaufgaben behandelt werden:

  • Durch die EnableLogging-Methode wird die allgemeine Protokollierung aktiviert. Sie enthält Parameter zum Angeben eines alternativen Protokolldateipfads sowie dazu, ob Anwendungsname und Prozess-ID dem Protokolldateinamen hinzugefügt werden und ob Ereignisse bei ihrem Eintreten protokolliert werden sollen.

  • Mit der SetInteropLogging-Methode, der SetLoaderLogging-Methode und der SetNetworkLogging-Methode wird der entsprechende Wert des Schlüssel Enabled auf den Wert 1 festgelegt, wodurch die Protokollierung für die entsprechende Komponente aktiviert wird.

  • Mit der DisableLogging-Methode wird die Protokollierung vollständig deaktiviert.

  • Mit der WriteLoggingSettings-Methode werden die Schlüssel unter dem Unterschlüssel Logging rekursiv untersucht und die entsprechenden Namen und Werte in eine Protokolldatei geschrieben. Die Protokolldatei hat den Namen logsettings.txt und befindet sich in dem Verzeichnis, in dem diese Beispielanwendung enthalten ist.

' This method enables general logging. It contains parameters
' to specify a path, and Boolean values of true to include
' the application name, process ID, and events in the log.
Private Sub EnableLogging(ByVal useApp As Boolean, ByVal usePid As Boolean, ByVal useFlush As Boolean) 
    ' Specify values for setting the registry.
    Dim userRoot As String = "HKEY_LOCAL_MACHINE"
    Dim subkey As String = "SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging"
    Dim keyName As String = userRoot + "\" + subkey

    ' Set the Enabled registry value.
    Registry.SetValue(keyName, "Enabled", 1)

    If useApp = True Then
        Registry.SetValue(keyName, "UseApp", 1)
    Else
        Registry.SetValue(keyName, "UseApp", 0)
    End If 
    If usePid = True Then
        Registry.SetValue(keyName, "UsePid", 1)
    Else
        Registry.SetValue(keyName, "UsePid", 0)
    End If 
    If useFlush = True Then
        Registry.SetValue(keyName, "UseFlush", 1)
    Else
        Registry.SetValue(keyName, "UseFlush", 0)
    End If

End Sub

' This method sets the Enabled key value to 1
' so that logging for Interoperability is enabled.
Private Sub SetInteropLogging(ByVal logOn As Boolean) 
    ' Specify values for setting the registry.
    Dim userRoot As String = "HKEY_LOCAL_MACHINE"
    Dim subkey As String = "Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Interop"
    Dim keyName As String = userRoot + "\" + subkey

    Dim logSet As Integer
    If logOn = True Then
        logSet = 1
    Else
        logSet = 0
    End If 
    ' Set the registry value.
    Try
        Registry.SetValue(keyName, "Enabled", logSet)
        If logOn = True Then
            MessageBox.Show("Interop Logging On")
        Else
            MessageBox.Show("Interop Logging Off")
        End If
    Catch ex As System.Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub


' This method sets the Enabled key value to 1
' so that logging for class loading is enabled.
Private Sub SetLoaderLogging(ByVal logOn As Boolean) 
    ' Specify values for setting the registry.
    Dim userRoot As String = "HKEY_LOCAL_MACHINE"
    Dim subkey As String = "Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Loader"
    Dim keyName As String = userRoot + "\" + subkey

    Dim logSet As Integer
    If logOn = True Then
        logSet = 1
    Else
        logSet = 0
    End If 
    ' Set the registry value.
    Try
        Registry.SetValue(keyName, "Enabled", logSet)
        If logOn = True Then
            MessageBox.Show("Loader Logging On")
        Else
            MessageBox.Show("Loader Loggin Off")
        End If
    Catch ex As System.Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub


' This method sets the Enabled key value to 1,
' so that logging for networking is enabled.
Private Sub SetNetworkLogging(ByVal logOn As Boolean) 
    ' Specify values for setting the registry.
    Dim userRoot As String = "HKEY_LOCAL_MACHINE"
    Dim subkey As String = "Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Networking"
    Dim keyName As String = userRoot + "\" + subkey

    Dim logSet As Integer
    If logOn = True Then
        logSet = 1
    Else
        logSet = 0
    End If 
    ' Set the registry value.
    Try
        Registry.SetValue(keyName, "Enabled", logSet)
        If logOn = True Then
            MessageBox.Show("Networking Logging On")
        Else
            MessageBox.Show("Networking Logging Off")
        End If
    Catch ex As System.Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub


' This method disables all logging.
Private Sub DisableLogging() 
    ' Specify values for setting the registry.
    Dim userRoot As String = "HKEY_LOCAL_MACHINE"
    Dim subkey As String = "SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging"
    Dim keyName As String = userRoot + "\" + subkey

    ' Set the Enabled registry value.
    Registry.SetValue(keyName, "Enabled", 0)
    MessageBox.Show("Logging Disabled")

End Sub


' This method recursively examines the keys
' under the Logging subkey and writes their
' key names and values to a log file. It saves
' the information in "logsettings.txt", located
' in the directory that contains this example
' application.
Private Sub WriteLoggingSettings() 
    Dim sw As New StreamWriter("logsettings.txt", False)
    sw.WriteLine("General Logging Settings:")
    Dim rkLogging As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging")
    Dim valNames As String() = rkLogging.GetValueNames()
    Dim x As Integer
    For x = 0 To valNames.Length
        sw.WriteLine(valNames(x).ToString() + ": " + rkLogging.GetValue(valNames(x)).ToString())
    Next x

    sw.WriteLine()
    sw.WriteLine("Interop Logging:")
    Dim rkInterop As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging\Interop")
    Dim interopNames As String() = rkInterop.GetValueNames()

    For x = 0 To interopNames.Length
        sw.WriteLine(interopNames(x).ToString() + ": " + rkInterop.GetValue(interopNames(x)).ToString())
    Next x

    sw.WriteLine()
    sw.WriteLine("Loader Logging:")
    Dim rkLoader As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging\Loader")
    Dim loaderNames As String() = rkLoader.GetValueNames()
    For x = 0 To loaderNames.Length
        sw.WriteLine(loaderNames(x).ToString() + ": " + rkLoader.GetValue(loaderNames(x)).ToString())
    Next x

    sw.WriteLine()
    sw.WriteLine("Networking Logging:")
    Dim rkNetworking As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\.NETCompactFramework\Diagnostics\Logging\Networking")
    Dim netNames As String() = rkNetworking.GetValueNames()
    For x = 0 To netNames.Length
        sw.WriteLine(netNames(x).ToString() + ": " + rkNetworking.GetValue(netNames(x)).ToString())
    Next x
    sw.Close()
End Sub
// This method enables general logging. It contains parameters
// to specify a path, and Boolean values of true to include
// the application name, process ID, and events in the log.
private void EnableLogging(bool useApp, bool usePid, bool useFlush)
{
    // Specify values for setting the registry.
    string userRoot = "HKEY_LOCAL_MACHINE";
    string subkey = "SOFTWARE\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging";
    string keyName = userRoot + "\\" + subkey;

    // Set the Enabled registry value.
    Registry.SetValue(keyName, "Enabled", 1);

    if (useApp == true)
        Registry.SetValue(keyName, "UseApp", 1);
    else
        Registry.SetValue(keyName, "UseApp", 0);

    if (usePid == true)
        Registry.SetValue(keyName, "UsePid", 1);
    else
        Registry.SetValue(keyName, "UsePid", 0);

    if (useFlush == true)
        Registry.SetValue(keyName, "UseFlush", 1);
    else
        Registry.SetValue(keyName, "UseFlush", 0);
}

// This method sets the Enabled key value to 1
// so that logging for Interoperability is enabled.
private void SetInteropLogging(bool logOn)
{
    // Specify values for setting the registry.
    string userRoot = "HKEY_LOCAL_MACHINE";
    string subkey = "Software\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Interop";
    string keyName = userRoot + "\\" + subkey;

    int logSet;
    if(logOn == true)
      logSet = 1;
    else
      logSet = 0;

    // Set the registry value.
    try
    {
     Registry.SetValue(keyName, "Enabled", logSet);
     if(logOn == true)
        MessageBox.Show("Interop Logging On");
     else
        MessageBox.Show("Interop Logging Off");
     }
     catch(System.Exception ex)
     {
        MessageBox.Show(ex.Message);
     }
}

// This method sets the Enabled key value to 1
// so that logging for class loading is enabled.
private void SetLoaderLogging(bool logOn)
{
    // Specify values for setting the registry.
    string userRoot = "HKEY_LOCAL_MACHINE";
    string subkey = "Software\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Loader";
    string keyName = userRoot + "\\" + subkey;

    int logSet;
    if(logOn == true)
    logSet = 1;
    else
    logSet = 0;

    // Set the registry value.
    try
    {
        Registry.SetValue(keyName, "Enabled", logSet);
        if(logOn == true)
        MessageBox.Show("Loader Logging On");
        else
        MessageBox.Show("Loader Logging Off");
    }
    catch(System.Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

  // This method sets the Enabled key value to 1
  // so that logging for networking is enabled.
  private void SetNetworkLogging(bool logOn)
  {
    // Specify values for setting the registry.
    string userRoot = "HKEY_LOCAL_MACHINE";
    string subkey = "Software\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Networking";
    string keyName = userRoot + "\\" + subkey;

    int logSet;
    if(logOn == true)
      logSet = 1;
    else
      logSet = 0;

    // Set the registry value.
    try
    {
         Registry.SetValue(keyName, "Enabled", logSet);
         if(logOn == true)
            MessageBox.Show("Networking Logging On");
         else
            MessageBox.Show("Networking Loggin Off");
     }
     catch(System.Exception ex)
     {
        MessageBox.Show(ex.Message);
     }
  }

// This method disables all logging.
private void DisableLogging()
{
    // Specify values for setting the registry.
    string userRoot = "HKEY_LOCAL_MACHINE";
    string subkey = "SOFTWARE\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging";
    string keyName = userRoot + "\\" + subkey;

    // Set the Enabled registry value.
    Registry.SetValue(keyName, "Enabled", 0);
    MessageBox.Show("Logging Disabled");
}

// This method recursively examines the keys
// under the Logging subkey and writes their
// key names and values to a log file. It saves
// the information in "logsettings.txt" located
// in the directory that contains this 
// example application.
private void WriteLoggingSettings()
{
    StreamWriter sw = new StreamWriter("logsettings.txt",false);
    sw.WriteLine("General Logging Settings:");
    RegistryKey rkLogging = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging");
    string[] valNames = rkLogging.GetValueNames();
    for (int x = 0; x < valNames.Length; x++)
    {
        sw.WriteLine(valNames[x].ToString() + ": " + rkLogging.GetValue(valNames[x]).ToString());
    }

    sw.WriteLine();
    sw.WriteLine("Interop Logging:");
    RegistryKey rkInterop = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Interop");
    string[] interopNames = rkInterop.GetValueNames();
    for (int x = 0; x < interopNames.Length; x++)
    {
        sw.WriteLine(interopNames[x].ToString() + ": " + rkInterop.GetValue(interopNames[x]).ToString());
    }

    sw.WriteLine();
    sw.WriteLine("Loader Logging:");
    RegistryKey rkLoader = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Loader");
    string[] loaderNames = rkLoader.GetValueNames();
    for (int x = 0; x < loaderNames.Length; x++)
    {
        sw.WriteLine(loaderNames[x].ToString() + ": " + rkLoader.GetValue(loaderNames[x]).ToString());
    }

    sw.WriteLine();
    sw.WriteLine("Networking Logging:");
    RegistryKey rkNetworking = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\.NETCompactFramework\\Diagnostics\\Logging\\Networking");
    string[] netNames = rkNetworking.GetValueNames();
    for (int x = 0; x < netNames.Length; x++)
    {
        sw.WriteLine(netNames[x].ToString() + ": " + rkNetworking.GetValue(netNames[x]).ToString());
    }
   sw.Close();
}

Kompilieren des Codes

Für dieses Beispiel sind Verweise auf die folgenden Namespaces erforderlich:

Siehe auch

Konzepte

Protokolldateiinformationen

Weitere Ressourcen

Leistung und Diagnose in .NET Compact Framework