2012-01-25 23 views
6

Próbuję zainstalować sterownik na komputerze klienta, na podstawie której wersji MySQL jest zainstalowany na serwerze i do tego chcę sprawdzić wersję na serwerze za pomocą klucza rejestru.Wyliczenie podkluczy rejestru w delphi

To powiedziawszy, muszę wyliczyć podklucza (ów) z HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB. Zwykle jest tylko jeden klucz pod tym i ma on zazwyczaj postać: MySQL Server #.#, gdzie # oznacza numer.

Ale ponieważ nie wiem, która to wartość, czy istnieje sposób na uzyskanie klucza, a następnie mogę uzyskać numery z nazwy, aby ustalić, który sterownik zainstalować? Myślę, że wyliczenie podkluczy jest najlepszym sposobem na zdobycie klucza, ale może sprytne formatowanie i pętla będą działać?

Odpowiedz

11

Najlepszym rozwiązaniem jest wyliczenie klawiszy podklucza. Używając tego, robisz to w prostej pętli, dopóki nie pozostanie więcej kluczy do wyliczenia.

Jednak wyliczanie klucze podrzędne w Delphi za pomocą TRegistry wciąż jest jeszcze łatwiejsze:

program _EnumSubKeys; 

{$APPTYPE CONSOLE} 

uses 
    SysUtils, Classes, Windows, Registry; 

procedure EnumSubKeys(RootKey: HKEY; const Key: string); 
var 
    Registry: TRegistry; 
    SubKeyNames: TStringList; 
    Name: string; 
begin 
    Registry := TRegistry.Create; 
    Try 
    Registry.RootKey := RootKey; 
    Registry.OpenKeyReadOnly(Key); 
    SubKeyNames := TStringList.Create; 
    Try 
     Registry.GetKeyNames(SubKeyNames); 
     for Name in SubKeyNames do 
     Writeln(Name); 
    Finally 
     SubKeyNames.Free; 
    End; 
    Finally 
    Registry.Free; 
    End; 
end; 

begin 
    EnumSubKeys(HKEY_LOCAL_MACHINE, 'Software\Microsoft'); 
    Readln; 
end. 

Jedną rzeczą, którą należy zwrócić uwagę jest konieczności wyszukiwania w widoku 64 bitowego rejestru. Jeśli masz zainstalowaną 64-bitową wersję MySQL, oczekuję, że użyje 64-bitowego widoku rejestru. W 32-bitowym procesie Delphi na 64-bitowym systemie operacyjnym konieczne będzie przekierowanie rejestru krokiem bocznym. Zrób to, przekazując KEY_WOW64_64KEY do konstruktora TRegistry.


Alternatywą, którą proponujesz, jest zakodowanie wszystkich możliwych wartości ciągu wersji w swojej aplikacji. To brzmi jak porażka, która czeka na wydanie, gdy tylko zostanie wydana wersja, której nie ma na liście zakodowanej na stałe.

+0

Dziękujemy! Tego właśnie szukałem, bardzo prosto. Ponadto, dla każdego, kto może robić coś podobnego, użyłem Registry.RegistryConnect ("SomeIP") do połączenia się z komputerem zdalnym. – Aaron