Ver Mensaje Individual
  #1  
Antiguo 28-07-2010
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Reputación: 18
vejerf Va por buen camino
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!
__________________
"Patientia et constantia taelecum"
Responder Con Cita