Website-Icon Alex Haack

Visual Studio: Windows Registry – lesen/schreiben – Beispiel für die Console

Zuletzt aktualisiert am 13.06.2023 um 10:06 Uhr

0
(0)

Im Web fand ich ein ‘einfaches’ Beispiel, indem ein Wert in der Windows Registry geschrieben und auch entsprechend gelesen wird. Das Beispiel legt einen neuen Wert mit dem aktuellen Datum fest, danach liest das Programm den Wert aus und je nachdem wird eine entsprechende Ausgabe geliefert, entweder dass die Anwendung aktiv oder abgelaufen ist. Natürlich wird nur der Text ausgegeben, das Programm in diesem Beispiel läuft uneingeschränkt. Natürlich kann nach Belieben der ganze Code erweitert werden, und auch tatsächlich eine Art ablaufende Anwendung gebaut werden.

Voraussetzungen

Beispielcode

Hier ist der Beispielcode, einmal aus der Datei Program.cs und app.manifest

Quelle des Beispielcodes: partech.nl/en/publications/2020/09/working-with-windows-registry (aufgerufen am 02.08.2021)

In der Windows Registry wird beim 64-bittigen Windows der Wert anders angelegt als im 32-bittigen. Die Registry kann folgendermaßen gestartet werden: Tastenkombination WIN + R mit der Eingabe regedit.

Pfad bei einem 32-bittigem Windows

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\MyRegKey

Pfad bei einem 64-bittigem Windows

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\MyRegKey

Program.cs

using Microsoft.Win32;
using System;

/*
 * Original by partech.nl/en/publications/2020/09/working-with-windows-registry
 */

namespace ExampleWindowsRegistryConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            CheckAndCreateRegistry();
            Console.ReadLine();
        }

        static void CheckAndCreateRegistry()
        {
            dynamic registryValue = GetRegistryValue();

            registryValue = registryValue != null ? registryValue.ToString() : string.Empty;

            /* Check whether the Registry is already configured. If not, create Registry. */
            if (String.IsNullOrWhiteSpace(registryValue))
            {
                registryValue = DateTime.Now.ToShortDateString();
                var softwareSubKey = Registry.LocalMachine.OpenSubKey("SOFTWARE", true);
                var keyData = softwareSubKey.CreateSubKey("MyRegKey");
                keyData.SetValue("Configuration", registryValue);
                keyData.Close();
                Console.WriteLine($"Registry created with value: {registryValue}");
            }
            else
            {
                Console.WriteLine($"Registry already created with value: {registryValue}");

                DateTime date = Convert.ToDateTime(registryValue);
                Console.WriteLine((date.AddDays(30) >= DateTime.Now.Date) ? "Application is active" : "Application Expired");
            }
        }

        static object GetRegistryValue()
        {
            return Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\MyRegKey", "Configuration", string.Empty);
        }
    }
}

app.manifest

Damit dieses Programm überhaupt Rechte wie lesen/Schreiben oder Löschen in der Windows Registry hat, benötigt es administrative Rechte. In diesem Beispiel wird nur ein Wert geschrieben und gelesen. Gelöscht wird hier nichts…

<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Beispielausgaben

Erster Start

Wert in der Registry existiert noch nicht.

Registry created with value: 02.08.2021

Weiterer Start (aktiv)

Wenn das Datum noch nicht überschritten wurde, dann wird dieses Beispiel angezeigt.

Registry already created with value: 02.08.2021
Application is active

Weiterer Start (inaktiv)

Wenn das Datum überschritten wurde, dann wird dieses Beispiel angezeigt. Im Code wurden 30 Tage angegeben.

Registry already created with value: 02.07.2021
Application Expired

Download

Hier kann die komplette Projektdatei im ZIP-Format heruntergeladen werden.

Einsprachige Variante (englisch)

Mehrsprachige Variante

Als weiteres Beispiel eine mehrsprachige Projektdatei. Damit es einfacher wird, wurde ResX Manager für Visual Studio verwendet. Zusätzlich wurde deutsch hinzugefügt, wobei in diesem Beispiel die Übersetzung leicht merkwürdig scheint. Je nach dem welche Sprache in Windows aktuell verwendet wird, wird auch die jeweilige Sprache automatisch geladen. Die Standardsprache ist englisch. Im Ordner de-DE befindet sich die kompilierte Sprachdatei, in diesem Beispiel heißt sie ‘ExampleWindowsRegistryConsole.resources.dll’.

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Beitrag teilen

Bereits 0 Mal geteilt!

Die mobile Version verlassen