Zuletzt aktualisiert am 13.06.2023 um 10:06 Uhr
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
- Windows (mit Windows 10 getestet)
- Visual Studio 2019 oder 2022 Preview (Commuity ist vollkommen ausreichend und kostenlos)
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’.