2012-01-25 20 views
6

Estoy tratando de instalar un controlador en un equipo cliente basado en la versión de MySQL está instalado en el servidor y para hacer que me gustaría comprobar la versión en el servidor a través de clave de registro.Enumerar subclaves del registro en delphi

Dicho esto, tengo que enumerar la subclave (s) de HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB. Generalmente hay solo una clave debajo de esta y generalmente tiene la forma: MySQL Server #.#, donde # representa un número.

Pero debido a que no sé qué valor son aquellos, ¿hay una manera de conseguir la llave y entonces puedo obtener los números del nombre para determinar qué controlador para instalar? Estoy pensando que enumerar las subclaves es la mejor forma de obtener la clave, ¿pero quizás también funcionaría un formateo de cadenas inteligente y un bucle?

Respuesta

11

La mejor solución es enumerar las subclaves. Usando RegEnumKeyEx, simplemente hazlo en un bucle simple hasta que no queden más claves para enumerar.

Sin embargo, la enumeración de las subclaves en Delphi usando TRegistry es aún más fácil todavía:

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 que usted debe tener en cuenta es tener que buscar en la vista de 64 bits del registro. Si tiene instalada la versión de 64 bits de MySQL, entonces espero que use la vista de 64 bits del registro. En un proceso Delphi de 32 bits en un sistema operativo de 64 bits, necesitará redireccionar el registro paso a paso. Hazlo pasando el KEY_WOW64_64KEY al constructor TRegistry.


La alternativa que usted propone es codificar todos los valores posibles de la cadena de versión en su aplicación. Eso suena como una falla que espera ocurrir tan pronto como se lanza una versión que no está en su lista codificada.

+0

¡Gracias! Esto era lo que estaba buscando, muy simple. Además, para cualquier otra persona que pueda estar haciendo algo similar, utilicé Registry.RegistryConnect ('SomeIP') para conectarme a la computadora remota. – Aaron

Cuestiones relacionadas