Dlaczego potrzebny jest rejestr systemu Windows?

56

Ponieważ debugowałem problemy z komunikacją obok siebie, zajmowałem się piekłem dll, a jednocześnie nienawidziłem rejestru systemu Windows z pasją, zastanawiałem się, dlaczego jest to potrzebne.

Nigdy nie czułem się zmuszony do przeczytania całej książki na temat najlepszych praktyk w rejestrze, a następnie po prostu „pobierz”.

Korzystałem jednak z systemu Linux i Mac OS i przyglądam się sposobom instalowania wielu wersji Pythona i jego bibliotek na tym samym komputerze * nix.

Ponieważ rejestr ma nieco darmowy (choć brzydki) format i jest używany do różnych celów, nigdy nie zrozumiałem, jaki zasadniczy problem próbuje rozwiązać.

Na przykład Microsoft nie chce, aby dwie różne wersje MS Office były instalowane obok siebie. Używają rejestru, aby wymusić to podczas instalacji. Moim zdaniem to ograniczenie jest sztuczne. Gdyby naprawdę chcieli pozwolić na inne zachowanie, mogliby odpowiednio dostosować swoją architekturę.

W systemie Mac OS możesz instalować i usuwać aplikacje, po prostu upuszczając je w określonym folderze.

Więc,

A) Jaki istotny problem próbuje rozwiązać? B) Jak rozwiązują to inne systemy operacyjne?

Praca
źródło
2
Aplikacje można również instalować metodą przeciągnij i upuść w systemie Windows. IDE Eclipse to pierwszy przykład, jaki przychodzi na myśl. Są inne, jestem pewien. Rejestr służy również do konfigurowania wielu innych aspektów systemu operacyjnego (zawsze myślałem, że był to główny cel jego istnienia) i innych programów, a także może być nadużywany na różne interesujące i kreatywne sposoby.
FrustratedWithFormsDesigner
Zobacz fun.drno.de/flash/howto_turn_windows_into_linux.swf Kroki 2–4 zawierają zabawne porównanie tego rodzaju danych konfiguracyjnych dla systemu Windows i Linux. ;)
FrustratedWithFormsDesigner
3
Możesz mieć zainstalowane dwie wersje pakietu Office, więc wspomniane „ograniczenie” nie jest po prostu sztuczną fikcją
Conrad Frix
1
@Praca. Myślę, że mógłbym się z tym zgodzić, z wyjątkiem faktu, że problem ma zaakceptowane rozwiązanie, poprawkę rejestru (ironia nie została utracona), co odnosi się do równoległego uruchamiania 2007/2003. Kiedy wystąpił ten problem, gdy chciałeś uruchomić dwie instalacje pakietu Office obok siebie? BTW, tu jest KB Za prowadzenie XP i 97 obok siebie
Conrad Frix

Odpowiedzi:

42

Większość pozostałych odpowiedzi jest mniej lub bardziej poprawna, ale (wraz z pytaniem) w pewnym sensie brakuje im sensu.

Rejestr jest hierarchicznym menedżerem baz danych - niczym więcej i niczym innym.

„Błędy” przypisywane do rejestru są naprawdę niezależne od samego rejestru. Są to po prostu decyzje podejmowane przez różnych dostawców, dotyczące np. Sposobu instalowania programów - jeśli przechowujesz informacje w innej formie / formie / kontenerze, mogą pozostać te same problemy.

Biorąc pod uwagę filozofię Unixa „wszystko jest plikiem”, nie powinno być (ani nie powinno być) zaskoczeniem, że systemy Unix (i podobne, takie jak Linux i MacOS) przechowują informacje jako pojedyncze pliki w systemie plików. Nie jest to prawie tak różne, jak wiele osób może od razu uwierzyć, ponieważ system plików Unix sam w sobie jest hierarchiczną bazą danych (lub, być może, sieciową bazą danych, jeśli weźmiesz pod uwagę dowiązania symboliczne). Rażąca różnica polega na tym, że dostęp do rejestru uzyskuje się za pomocą oddzielnego interfejsu API, przy czym przechowywanie danych konfiguracyjnych w plikach umożliwia dostęp do tych plików, ich edycję itp. Za pośrednictwem tego samego interfejsu API (i narzędzi), co innych plików.

Jerry Coffin
źródło
11
@ Conrad Frix: co sprawia, że ​​myślisz, że transakcje ACID lub język zapytań jest koniecznie częścią bazy danych?
Jerry Coffin
1
@Jerry, oczywiście. Zgadzam się z tobą. Ale (jak potwierdza komentarz Conrada) wielu jest skłonnych zakładać pewne rzeczy na temat właściwości czegoś zwanego „bazą danych”, więc myślę, że moja próba mediacji jest po prostu przegrana.
Nicole,
1
@ Conrad Frix: niektóre systemy plików nie są oczywiście hierarchiczne. Ale nie miałem na myśli, że Unix FS był bardziej hierarchiczny niż inne - NTFS (tylko na przykład) jest również.
Jerry Coffin
3
@JBRWilkinson: Masz rzeczy do tyłu. Istnieją inne komponenty, które zależą od zakodowanych lokalizacji w rejestrze (podobnie jak komponenty w Uniksie, które zależą od zakodowanych ścieżek plików). Nie zmienia to jednak rejestru.
Jerry Coffin
25

To repozytorium ustawień - scentralizowana i nieco znormalizowana lokalizacja preferencji, ustawień, lekkich profili .

Łatwiej jest zrozumieć, gdy spojrzysz na ogólny obraz wszystkich rzeczy, które system operacyjny musi przechowywać dla swoich użytkowników i aplikacji:

Windows

  • Repozytorium ustawień
    • System: Rejestr systemu Windows, HKEY_LOCAL_MACHINEa konkretnie duża jego część\SOFTWARE\Microsoft
    • Zewnętrzny systemowy: Rejestr systemu WindowsHKEY_LOCAL_MACHINE
    • System zorientowany na użytkownika: rejestr systemu Windows HKEY_USERS,[user]\SOFTWARE\Microsoft
    • Zewnętrzny zorientowany na użytkownika: rejestr systemu WindowsHKEY_USERS\[user]\SOFTWARE
  • Pliki aplikacji, których użytkownik nie powinien widzieć C:\Users\[User]\AppData w ukrytych folderach
  • Pliki aplikacji, które użytkownik może chcieć C:\Users\[User]\ w nie ukrytych folderach utworzonych przez aplikację

Mac OS X

  • Repozytorium ustawień
    • System i inne firmy: /Library/Preferences w com.apple...plistplikach
    • Zewnętrzny systemowy: /Library/Preferences w plistplikach zewnętrznych
    • System zorientowany na użytkownika: /Users/[user]/Library/Preferences tak samo jak powyżej
    • Zewnętrzne zorientowane na użytkownika: /Users/[user]/Library/Preferences tak samo jak powyżej
  • Systemowe pliki aplikacji, których użytkownik nie powinien widzieć /Library/Application Support
  • Pliki aplikacji, których użytkownik nie powinien widzieć /Users/[user]/Library/Application Support
  • Pliki aplikacji, które użytkownik może chcieć /Users/[user]/ w nie ukrytych folderach

Zasadniczo rejestr jest identyczny z folderami Mac OS X /Library/Preferences i niewiele więcej.

Fakt, że Mac OS ma prawie jeden do jednego dopasowanie do grup organizacyjnych danych systemowych i aplikacji, pokazuje, że rejestr systemu Windows jest całkowicie uzasadnionym systemem, który jest po prostu innym sposobem robienia rzeczy.

Charakter rejestru niezwiązany z systemem plików utrudnia tworzenie kopii zapasowych, przywracanie lub migrację jego części, pozostawiając inne, więc wolę system Mac, ale cel jest prawie identyczny.

Oba systemy operacyjne mają aplikacje, które wybierają naruszanie tych struktur w różnym stopniu, zwykle poprzez uzurpowanie sobie bardziej globalnego kontekstu do tworzenia plików lub folderów, które tak naprawdę nie należą. Niektóre aplikacje faktycznie tworzą foldery bezpośrednio C:\lub /bez pytania. To naprawdę doprowadza mnie do szału!


Nawiasem mówiąc, podczas gdy przeciąganie i upuszczanie (większości) aplikacji Mac OS jest genialne, masz podobny problem z różnymi wersjami obok siebie, chociaż prawdopodobnie nie zauważasz - ponieważ twoje ustawienia nie są przechowywane w .appsobie, ale w pliku Application Supportlub Preferenceskażda wersja aplikacji będzie nadal korzystać z tych samych ustawień i wpływają na siebie nawzajem, chyba że nowsza wersja wyraźnie postanawia wykorzystać folder pod inną nazwą ( IntelliJIDEA70, IntelliJIDEA81etc.)

Nicole
źródło
To prawda, że ​​rejestr początkowo był początkiem repozytorium ustawień, zastępując pliki INI, jednak obecnie jest często używany jako ogólne miejsce do przechowywania danych, stąd rozdęte ule.
Synetech
20

Nigdy nie zrozumiałem, jaki zasadniczy problem próbuje rozwiązać.

Przed rejestrem system Windows używał plików .INI. W poście na blogu Dlaczego pliki INI są przestarzałe na rzecz rejestru? Raymond Chen wylicza problemy, które istniały w plikach .INI, które próbowano rozwiązać. Wymienia także problemy, które dzielą pliki konfiguracyjne XML ze starymi plikami .ini. Prawdopodobnie jest to, na co warto spojrzeć, ponieważ właśnie z tego korzysta dziś wiele aplikacji.

... wahadło wróciło do tekstowych plików konfiguracyjnych, ale tym razem są to XML. Powoduje to ponowne otwarcie wielu problemów, które miały pliki INI, ale masz tę główną zaletę, że nikt nie zapisuje plików konfiguracyjnych XML; czytają tylko od nich. Pliki konfiguracyjne XML nie są używane do przechowywania ustawień użytkownika; zawierają tylko informacje o samym programie. Spójrzmy jeszcze raz na te problemy.

  • Zabezpieczenia plików XML nie są wystarczająco szczegółowe. Ale ponieważ plik konfiguracyjny XML jest tylko do odczytu, podstawowy zarzut jest omijany. (Ale jeśli chcesz, aby tylko administratorzy mieli uprawnienia do odczytu określonych części XML, masz kłopoty).
  • Ponieważ pliki konfiguracyjne XML są tylko do odczytu, nie musisz się martwić wieloma pisarzami.
  • Pliki konfiguracyjne XML mogą podlegać odmowie usługi. Nadal możesz je otwierać wyłącznie i blokować inne procesy.
  • Pliki XML zawierają tylko ciągi znaków. Jeśli chcesz przechowywać dane binarne, musisz je jakoś zakodować.
  • Analiza pliku XML jest stosunkowo powolna. Ale ponieważ są one tylko do odczytu, możesz bezpiecznie zapisać w pamięci podręcznej przeanalizowany wynik, więc musisz go tylko raz przeanalizować.
  • Programy parsują pliki XML ręcznie, ale format XML jest już zablokowany, więc i tak nie można go rozszerzyć, nawet jeśli chcesz. Mam nadzieję, że te programy używają zgodnego ze standardami parsera XML zamiast toczenia własnego, ale nie zdziwiłbym się, gdyby ludzie napisali własny niestandardowy parser XML, który dusi, powiedzmy, instrukcje przetwarzania lub ciągi znaków dłuższe niż 70 znaków.
  • Pliki XML nie mają ograniczenia rozmiaru.
  • Pliki XML nie mają domyślnej lokalizacji.

Wszystko to zakłada, że ​​aplikacja rzeczywiście nigdy nie zapisuje do swoich plików konfiguracyjnych, co do których nie zgadzam się, ale pogorszyłoby to sytuację.

Conrad Frix
źródło
2
Co najmniej trochę ironiczne jest to, że wiele aplikacji całkowicie rezygnuje z rejestru teraz na rzecz plików INI (nie tyle w przypadku XML) dzięki wzrostowi popularności „przenośności”, samej dzięki napędom flash.
Synetech
11

Moja teoria mówi, że siłą napędową nie jest żadna z powyższych. Był to raczej środek antypiracki. W dniach poprzedzających rejestr można ogólnie po prostu skopiować cały program z jednego komputera na drugi. Znajdź pliki .DLL i już możesz jechać. Rejestr sprawia, że DUŻO jest to trudniejsze.

Rejestr osiąga bardzo niewiele, co moim zdaniem nie byłoby lepiej obsługiwane przez jeden plik konfiguracyjny dla jednego celu.

(2014) Aby nieco rozwinąć moje rozumowanie: rejestr widzę jako obiekt boga. Wszyscy wiemy, że to antypattern.

Loren Pechtel
źródło
7
Więc Microsoft stworzył coś specjalnie, aby ograniczyć to, co użytkownicy mogą łatwo zrobić? ... brzmi dobrze.
dan_waterworth
Zdecydowanie anty-wzór. Ciekawe myśli
Brad Thomas
Interesująca perspektywa, ale w momencie wprowadzenia rejestru nadal jest to era DOS + Windows, w której wojna między piratami i ochrona przed kopiowaniem była u szczytu z dużą ilością czarnej magii dzięki dostępności sprzętu. Jest mało prawdopodobne, aby ktoś w tym momencie polegał na rejestracji w celu ochrony przed kopiowaniem.
Codism
6

Z grubsza rozumiem, że rejestr został zaprojektowany jako rodzaj repozytorium ustawień, zastępując pliki .ini, które były używane.

(Uwaga, prymitywne zrozumienie, więc może to być niepoprawne).

Megan Walker
źródło
5

A) Zgadzam się z odpowiedzią Tima.

B) Inne systemy operacyjne używają innych metod przechowywania ustawień programów, na przykład Unix zwykle umieszcza pliki w / etc (pliki globalne) oraz w folderze użytkownika w różnych ukrytych folderach (ustawienia użytkownika). Wszyscy używają jakiejś formy rejestru, z tym że w niektórych przypadkach jest on rozpowszechniany.

Coyote21
źródło
3

Jak rozumiem (niekoniecznie cieszę się)

A) Aby dać „scentralizowaną lokalizację”, w której dowolny program może przechowywać informacje o jego instalacji lub konfiguracji. Informacje te mogą być następnie wykorzystane przez programy w dowolny sposób. Personalizacja, antypiractwo itp.

Wszystkie te informacje, które są w tej strukturze, w pewien sposób je chronią, pomyśl o idei gromadzących się zwierząt, większe bezpieczeństwo w liczbach. Jeśli każdy kawałek informacji byłby własnym plikiem ini, to jakiś użytkownik mógłby potencjalnie usunąć go kaprysem. Nadal mogą to zrobić, wchodząc do rejestru, ale wielu uważa to za czarną skrzynkę i nie dotknie jej z obawy przed zerwaniem systemu.

B) Mac OS używa pojedynczych plików, podobnie jak okna plików ini używane przed pojawieniem się rejestru.

Tim
źródło
3

Oczywistym celem rejestru jest działanie jako pojedyncze repozytorium dla wszystkich danych konfiguracyjnych i ustawień oraz usunięcie zależności od plików konfiguracyjnych.

W innych systemach operacyjnych modus operandi polega na przechowywaniu informacji specyficznych dla aplikacji (takich jak pliki konfiguracyjne) w ukrytych katalogach specyficznych dla aplikacji w katalogu osobistym użytkowników. (Na przykład gra Aquaria przechowuje informacje o konfiguracji w $HOME/.Aquaria.) Pliki ustawień globalnych są przechowywane w /etc/.

Komputery Mac działają samodzielnie: plistpliki specyficzne dla aplikacji są przechowywane (sądzę) w katalogu użytkownika lub systemu Library.

greyfade
źródło
3

Problem nie leży w filozofii rejestru, ale w jego projekcie. Rejestr jest używany przez system operacyjny do wyszukiwania ważnych informacji dotyczących ładowanego programu. Chociaż zamiast ładować informacje w razie potrzeby, ładuje je wszystkie podczas uruchamiania, co „może” wpłynąć na wydajność systemu. System jest również poważnie nadużywany, ponieważ dostawcy ładują go z dużą ilością informacji i często nie usuwają informacji po odinstalowaniu oprogramowania.

W przeciwieństwie do Uniksa, w którym wszystko jest przechowywane n plików i ładowane w razie potrzeby. System operacyjny w ten sposób nie zależy od umiejętności programistycznych dostawcy, aby wpłynąć na jego wydajność ...

Gaurav Sehgal
źródło
2

Chociaż nie mogę komentować innych systemów operacyjnych, rejestr pomaga również utrzymać konfigurację aplikacji podczas procesu aktualizacji lub odinstalowywania / ponownej instalacji. Jeśli cała konfiguracja znajdowała się w pliku .ini, który wymagał wymiany ze względu na aktualizację, która dodała funkcje, możesz napotkać trudności lub utworzyć niestandardowy proces w celu scalenia danych konfiguracyjnych w przychodzącym pliku ini.

Jednak z danymi w rejestrze można korzystać ze wspólnego pakietu instalatora (WIX, InstallShield itp.), Który będzie obsługiwał odinstalowywanie / ponowne instalowanie plików bez zmiany ustawień aplikacji.

Dillie-O
źródło
1

(wszystkie A. Nie jestem pewien co do B)

Uważam, że tak naprawdę jest to (historyczny) punkt, w którym rejestr działa jako rodzaj wspólnego interfejsu dla ustawień aplikacji.

Masz aplikację? Chcesz zapisać ustawienia o zasięgu użytkownika? Znalazłem go w rejestrze.

Nie trzeba „zapewniać profili użytkowników”, nie trzeba w ogóle uzyskiwać bezpośredniego dostępu do systemu plików. Win32 się tym wszystkim zajmuje.

James Love
źródło
1

Był to sposób na stworzenie czegoś nowego, nieznanego i tabu dla większości użytkowników, aby zostawili to w spokoju. Pliki .ini i autoexec.bat można łatwo usunąć lub zmienić na gorsze.

Zmieniam ustawienia rejestracji, ojej!

JeffO
źródło
1

Oprócz zwykłego przechowywania ustawień aplikacji, rejestr jest sposobem, w jaki programy i komponenty lokalizują inne programy i komponenty . Ostatecznie myślę, że właśnie dlatego jest scentralizowany w jednej bazie danych, w przeciwieństwie do tysięcy plików tekstowych lub XML.

Na przykład komponent, który wykonuje, powiedzmy, efekty wideo „rejestruje się” w rejestrze, umożliwiając innym aplikacjom związanym z wideo rozpoznanie jego istnienia i korzystanie z niego. Dzięki scentralizowanemu systemowi pozwala to uniknąć poważnego bałaganu, ponieważ tysiące systemów i aplikacji używają różnych metod do osiągnięcia tego poziomu integracji.

Grandmaster B.
źródło