Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Acceso al registro de un usuario limitado (no administrador) (https://www.clubdelphi.com/foros/showthread.php?t=69132)

vejerf 28-07-2010 11:55:24

Acceso al registro de un usuario limitado (no administrador)
 
Buenas a tod@s:

Tengo una aplicación casi desarrollada que he probado en varios PCs sin problemas, sin embargo en uno me encontré un problema y todo viene porque el usuario en cuestión no tiene privilegios de administrador.

Para empezar uso un componente de protección llamado TmxProtector y uso una protección con registro. Es decir, el componente me crea un número de serie que tengo q pasar para poder registrar el producto. Lógicamente para poder registrarlo necesito escribir en el registro de windows y esto sólo lo puedo hacer es si soy administrador. Bueno pues esto lo hice desde una cuenta de administrador y volví a la cuenta del usuario limitado.

Cuando intento arrancar la aplicación me llevo la sorpresa que se finaliza como si no estuviese registrada, así que supuse que el componente TmxProtector tampoco podía acceder en lectura al registro.

Me las ingenio para poder solventar este problema y la aplicación continúa, pero para mi sorpresa no se me abre los puertos COM que tengo configurados y es que antes de abrirlo yo accedo al registro para leer los puertos COM que tiene el PC (cosa que me parece lógica antes de intentar abrir puertos a lo loco) y al parecer es que, efectivamente, no tengo acceso ni en modo lectura al registro.

Para acceder a los puertos series registrados uso la función adaptada encontrada en el club:
Código Delphi [-]
procedure ListaPuertosCOM();
var
  N : Integer;
begin
  PuertosCOM := TStringList.Create;
  //Puertos COM disponibles en el PC
  with TRegistry.create do
  try
   rootkey:=HKEY_LOCAL_MACHINE;
   if keyexists('HARDWARE') then begin
    if openkey('HARDWARE',false)then begin
     if keyexists('DEVICEMAP') then begin
      if openkey('DEVICEMAP',false)then begin
       if keyexists('SERIALCOMM') then begin
        if openkey('SERIALCOMM',false)then begin
         GetValueNames(PuertosCOM);
         for N:=0 to PuertosCOM.count-1 do
          begin
            PuertosCOM.Strings[N]:=ReadString(PuertosCOM.strings[N]);
          end;
         end
        end;
       end;
      end;
     end;
   end;
  finally free;
  end;
  PuertosCOM.Sort;
end;

Mi pregunta entonces es: ¿Hay alguna otra forma de saber que puertos tengo en el PC desde un usuario limitado?

Gracias y un saludo!

vejerf 28-07-2010 15:42:54

Bueno, siguiendo un poco con el qué estaba sucediendo he sacado la siguiente conclusión.

En el procedimiento anterior el problema está en el método openkey que sirve para abrir la clave e incluso para crearla si no existe. Lógicamente un usuario limitado no puede modificar el registro por lo que esta función siempre devuelve false y nunca se rellena el TString con los puertos COM del PC


La franja horaria es GMT +2. Ahora son las 13:58:15.

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