W Windows istnieje bardzo wygodny sposób przechowywania ustawień konfiguracyjnych programu w rejestrze systemowym. Rejestr systemowy to taka centralna baza danych, dostępna dla wszystkich programów, w której gromadzone są informacje o komputerze oraz poszczególnych programach. W tym artykule napiszę w jaki sposób napisać program współpracujący z rejestrem pod C#.
Nie będę wdawał się w szczegóły opisujące rejestr, można je znaleźć w wielu miejscach w internecie, opiszę jedynie sam sposób pracy.
Najpierw upewnijmy się, iż posiadamy odpowiednie wpisy w miejscu definiowania przestrzeni nazw.
using Microsoft.Win32;
Aby móc pracować z rejestrem musimy otworzyć odpowiedni klucz z którym będziemy pracować. Aby to zrobić musimy skorzystać z klasy Registry. Wykonujemy więc:
RegistryKey rejestr = Registry.CurrentUser.OpenSubKey("Software\\miotk.eu\\SlepyLos");
W ten sposób otworzyliśmy dostęp do klucza "Software\\miotk.eu\\SlepyLos" w gałęzi HKEY_CURRENT_USER.
Aby otwierać klucze w innych gałęziach używamy:
RegistryKey rejestr = Registry.ClassesRoot.OpenSubKey("shell\\open"); // dla gałęzi HKEY_CLASSES_ROOT
RegistryKey rejestr = Registry.CurrentConfig.OpenSubKey("Software\\Microsoft\\windows"); // dla gałęzi HKEY_CURRENT_CONFIG
RegistryKey rejestr = Registry.DynData.OpenSubKey("SOFTWARE\\Microsoft"); // dla gałęzi HKEY_DYN_DATA
RegistryKey rejestr = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft"); // dla gałęzi HKEY_LOCAL_MACHINE
RegistryKey rejestr = Registry.Users.OpenSubKey("S-1-5-18\\Software\\Microsoft"); // dla gałęzi HKEY_USERS
Oczywiście wartości kluczy są przykładowe.
W ten sposób otworzyliśmy klucz w trybie do odczytu. Aby móc zapisywać lub kasować wartości musimy otworzyć go w trybie zapisu. Aby to zrobić otwieramy klucz z parametrem "true" po nazwie klucza, np.:
RegistryKey rejestr = Registry.CurrentUser.OpenSubKey("Software\\miotk.eu\\SlepyLos",true);
Jak już klucz został otwarty, to możemy wykonywać na tym kluczu operacje:
1. Dodanie wartości:
rejestr.SetValue("wersja", "1.0");
2. Odczyt wartości:
wartosc = rejestr.GetValue("wartosc");
3. Skasowanie wartości:
rejestr.DeleteValue("wartosc");
Na koniec zamykamy otwarty klucz:
rejestr.Close();
W ten sposób wykonywaliśmy pracę na wartościach rejestru. Oczywiście podobnie działamy na poszczególnych kluczach. Aby sprawdzić, czy klucz istnieje w systemie i jeżeli nie istnieje to go dodać, wykonujemy:
1. RegistryKey rejestr = Registry.CurrentUser.OpenSubKey("Software\\miotk.eu\\SlepyLos");
2. if (rejestr == null) // Jeżeli nie istnieje to utworzenie nowego
3. {
4. RegistryKey rejestrNew = Registry.CurrentUser.CreateSubKey("Software\\\miotk.eu\\SlepyLos");
5. }
W linii 1. próbujemy otworzyć klucz. W linii 2. sprawdzamy, czy się to nie udało. Jeżeli nie, to w linii 4. dodajemy klucz do rejestru.
Aby usunąć klucz z rejestru wykonujemy:
Registry.CurrentUser.DeleteSubKey("Software\\miotk.eu\\SlepyLos");
Dla ułatwienia istnieje też metoda na usunięcie całego drzewa kluczy:
Registry.CurrentUser.DeleteSubKeyTree("Software\\miotk.eu\\SlepyLos");
I to by było na tyle z podstaw obsługi rejestru systemowego Windows w C#.