2012-01-25 17 views
6

Sto tentando di installare un driver su un computer client in base a quale versione di MySQL è installata sul server e per farlo vorrei verificare la versione sul server tramite la chiave di registro.Enumera le sottochiavi del registro in delphi

Detto questo, ho bisogno di enumerare la sottochiave (s) di HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB. Di solito c'è solo una chiave sotto questa ed è generalmente nella forma: MySQL Server #.#, dove # sta per un numero.

Ma perché non so quale valore sono, c'è un modo per ottenere la chiave e quindi posso ottenere i numeri dal nome per determinare quale driver installare? Sto pensando che l'enumerazione delle sottochiavi sia il modo migliore per ottenere la chiave, ma forse potrebbe funzionare anche un'intelligente formattazione e ciclo delle stringhe?

risposta

11

La soluzione migliore è enumerare le sottochiavi. Usando RegEnumKeyEx lo fai semplicemente in un semplice ciclo fino a quando non ci sono più le chiavi da enumerare.

Tuttavia, l'enumerazione di chiavi secondarie in Delphi usando TRegistry è ancora più facile ancora:

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. 

Una cosa che si dovrebbe guardare fuori per è dover cercare nella visualizzazione a 64 bit del Registro di sistema. Se hai la versione a 64 bit di MySQL installata, mi aspetto che utilizzi la vista a 64 bit del registro. In un processo Delphi a 32 bit su un sistema operativo a 64 bit sarà necessario eseguire il reindirizzamento del Registro di sistema. Fallo passando KEY_WOW64_64KEY al costruttore TRegistry.


L'alternativa che si propone è di codificare tutti i possibili valori della stringa di versione nell'applicazione. Sembra un fallimento in attesa di accadere non appena viene rilasciata una versione che non è nella tua lista hard coded.

+0

Grazie! Questo era quello che stavo cercando, molto semplice. Inoltre, per chiunque altro stia facendo qualcosa di simile, ho usato Registry.RegistryConnect ('SomeIP') per connettermi al computer remoto. – Aaron

Problemi correlati