Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Acceder al registro de windows vista. (https://www.clubdelphi.com/foros/showthread.php?t=65506)

Angel Fernández 20-12-2009 20:44:09

Acceder al registro de windows vista.
 
Hola a todos. Quisiera comentaros un problema que tengo con windows vista (y que no tenía en windows xp) al tratar de leer una clave del registro.
Concretamente se trata de saber la ubicación del fichero gbak.exe de firebird para realizar copias de seguridad.
Hasta ahora, el código que utilizaba y que ya digo, funciona perfectamente en windows xp, es el siguiente:

Código Delphi [-]
procedure TFormConfigurar.btnDetectarClick(Sender: TObject);
var
  v_reg: TRegistry;
  MaxFileNameLength, VolFlags, SerNum: DWord;
  rutabin: string;
begin
  with TRegistry.Create do
  begin
    v_reg := TRegistry.Create;
    v_reg.RootKey := HKEY_LOCAL_MACHINE;
    try
      v_reg.OpenKey('\SOFTWARE\Firebird Project\Firebird Server\Instances', False);
      rutabin := v_reg.ReadString('DefaultInstance') + 'bin\gbak.exe';
      closekey;
    finally
      v_reg.Free;
    end;
  end;

  edtRutaGBAK.Text := rutabin;
end;

Este código pone en la variable rutabin el texto de gbak.exe con la ruta completa para llamarlo con shellexecute.

He comprobado que la clave existe y que es correcta. Es la siguiente:

Equipo\HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances\DefaultInstance

¿Alguna forma de solucionarlo?

Un saludo al foro.

Angel Fernández 20-12-2009 20:57:45

Perdón, olvidaba decir que no funciona no porque lanze ningún error sino porque la variable "rutabin" que debe leer el contenido de la clave, no toma ningún valor, siempre esta vacía.

Uso Delphi 7 sobre windows vista x64.

Un saludo.

Neeruu 28-12-2009 14:02:50

Acceder al registro de windows vista
 
Hola!!!

El problema que estas teniendo es que los Windows de 64bit tienen dirección diferente para las aplicaciones de 32bit...

No sabria explicarte bien que es lo que hace windows con el registro... pero te doy un ejemplo para que entiendas..

Ejemplo:

Si una aplicación en un Windows de 32 bit guarda información en el registro
esto puede quedar así:

Cita:

HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab\SetupFolders
Pero si el Sistema Operativo es de 64bit, esta información se encuentra en:

Cita:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\KasperskyLab\SetupFolders

Espero que te Sirva...

Saluda Atte Neeruu!!!:)
Feliz Año Nuevo para Todo el Club Delphi!!!

GaaK 28-12-2009 19:54:25

Cita:

Empezado por Angel Fernández (Mensaje 349214)
... He comprobado que la clave existe y que es correcta...

Hola, para poder acceder al registro debe correr la aplicación como administrador.
Me pasó con mi programa MultiMSN

Haga clic derecho sobre su .exe y Ejecute como administrador.
Saludos.
- Gaak -

Neeruu 29-12-2009 05:34:38

Cita:

Empezado por Angel Fernández (Mensaje 349214)

He comprobado que la clave existe y que es correcta.


La clave esa puede existir pero cuando intentas acceder windows te re direcciona a la parte donde guarda las claves de los programas de 32 bit...

voci 04-01-2010 19:35:35

Si realmente quieres acceder a la clave en HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab\SetupFolders sin que te redireccione, bien porque no exista una copia en HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\KasperskyLab\SetupFolders, lee este documento de microsoft y lo conseguirás sin problema:

http://msdn.microsoft.com/en-gb/libr...29(VS.85).aspx

Saludos.

Chris 04-01-2010 21:30:44

En lugar de la función OpenKey, debes utilizar OpenKeyReadOnly

El problema es que necesitas privilegios de administrador en XP y posteriores para hacer la llamada a OpenKey.

Saludos.

PD.: OpenKey sin privilegios de administrador solo puede ser utilizado en la clave HKEY_CURRENT_USER

mikzero 20-11-2010 19:24:56

Mismo Problema con Windows 7 Delphi 2007
 
Cita:

Empezado por Angel Fernández (Mensaje 349214)
Hola a todos. Quisiera comentaros un problema que tengo con windows vista (y que no tenía en windows xp) al tratar de leer una clave del registro.
Concretamente se trata de saber la ubicación del fichero gbak.exe de firebird para realizar copias de seguridad.
Hasta ahora, el código que utilizaba y que ya digo, funciona perfectamente en windows xp, es el siguiente:

Código Delphi [-]
procedure TFormConfigurar.btnDetectarClick(Sender: TObject);
var
  v_reg: TRegistry;
  MaxFileNameLength, VolFlags, SerNum: DWord;
  rutabin: string;
begin
  with TRegistry.Create do
  begin
    v_reg := TRegistry.Create;
    v_reg.RootKey := HKEY_LOCAL_MACHINE;
    try
      v_reg.OpenKey('\SOFTWARE\Firebird Project\Firebird Server\Instances', False);
      rutabin := v_reg.ReadString('DefaultInstance') + 'bin\gbak.exe';
      closekey;
    finally
      v_reg.Free;
    end;
  end;

  edtRutaGBAK.Text := rutabin;
end;

Este código pone en la variable rutabin el texto de gbak.exe con la ruta completa para llamarlo con shellexecute.

He comprobado que la clave existe y que es correcta. Es la siguiente:

Equipo\HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances\DefaultInstance

¿Alguna forma de solucionarlo?

Un saludo al foro.

Tengo el mismo Problema, cuando quiero hacer el ReadString no me devuelve nada y la variable rutabin queda con valor "bin\gbak.exe" cuando deberia traerme toda la ruta + bin\gbak.exe.

Estoy usando WINDOWS 7 y Delphi 2007 alguna idea?... Gracias

rretamar 28-11-2012 14:20:33

Respondo tardíamente (más que responder, es rescatar un tema de la tumba jeje :p ) por si le sirve a alguien:

Hay que reemplazar
Código Delphi [-]
v_reg.OpenKey('\SOFTWARE\Firebird Project\Firebird Server\Instances', False);

Por:
Código Delphi [-]
v_reg.OpenKeyReadOnly('\SOFTWARE\Firebird Project\Firebird Server\Instances');

Y voilá !!! , ya se puede leer la clave del registro indistintamente en Windows XP, Windows Vista, Windows 7 y Windows 8.

De hecho tengo preparada una función que la utiliza, para leer la ubicación de Firebird y poder ejecutar utilidades como Gbak:

Código Delphi [-]
Function Trayecto_Firebird: String;
Begin
  Result := '';
  With TRegistry.Create Do
    Try
      RootKey := HKEY_LOCAL_MACHINE;
      If OpenKeyReadOnly('\SOFTWARE\Firebird Project\Firebird Server\Instances') Then // Corregido para Windows 7 (se reemplaza OpenKey por OpenKeyReadOnly)
        Result := ReadString('DefaultInstance');
    Finally
      Free;
    End;
End;

Saludos !

MAXIUM 19-01-2014 20:49:40

Cita:

Empezado por rretamar (Mensaje 450723)

Y voilá !!! , ya se puede leer la clave del registro indistintamente en Windows XP, Windows Vista, Windows 7 y Windows 8

Comprobado :rolleyes:

Útil para leer registro de Windows 64bits ^\||/


La franja horaria es GMT +2. Ahora son las 23:04:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi