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

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)

[wpdm_package id=’5812′]

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‘.

[wpdm_package id=’5821′]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Alex Haack
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.