Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-08-2011
gersojn gersojn is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 85
Poder: 13
gersojn Va por buen camino
Privilegios en Aplicacion Delphi

Hola, les cuento que estoy haciendo una aplicacion la cual necesita permisos de administrador para que algunas funciones sirvan, como leer el nombre del procesador por medio de un Registry, etc.

He estado investigando y encontre un hilo que explicaba como hacerlo, no agrego el link porque aun no puedo agregar, pero cito textualmente la solucion a la que llegan:

Cita:
Empezado por Chris Ver Mensaje
El XPManifiest (declarado en la unidad XPMan) lo único que hace es incluir un archivo de recursos llamado WindowsXP.res (este archivo está en la carpeta de recursos de Delphi).

Lo que tienes que hacer, es hacer una modificación del archivos WindowsXP.res y con un editor de registros cambia el único recurso #24 con el siguiente contenido:
Código:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    type="win32"
    name="Delphi 7"
    version="7.1.0.0" 
    processorArchitecture="*"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
Guarda en un archivo separado la nueva versión del archivo de recursos. Talvez le puedes nombrar vista_RequireAdministrator_manifiest.res. Luego en el proyecto quita toda referencia a XPManifiest y la unidad XPMan (es muy importante que hagas esto). Cuando ya lo hallas hecho, en cualquier parte del código de tu aplicación incluye una directiva de compilación {$R vista_RequireAdministrator_manifiest.res} indicando que adjunte el archivo manifiesto que has creado con el código que anteriormente te proporcione.

Saludos,
Chris
Bueno, el problema que yo tengo es que trabajo con Windows 7, y con Embarcadero2010, y bueno lo unico que tengo dentro de la carpeta de mi aplicacion es un Project1.res, no tengo ninguno mas, intente inicialmente modificar ese archivo agregandole el codigo anterior y luego no me ejecuto la aplicacion, despues cree un archivo_prueba.res pero no logre adjuntarlo, el codigo del Project1.res es:

Código:
        ÿÿ  ÿÿ                  ¨      ÿÿ ÿÿ     
        (       @                                                                     U_U €€€ ª €€€ €€€ €€€ €€€ ¤   U?U U_U U?U U_* U_U U?U U_U U_U U?U U_U U?U U_U U?U U_U                                 €€€ U_U €€€ U_U €€€ €€€ ª €€€ ªŸª U_U ÿ ªU ª_U ª_U ª_U ª_U U?U U¿Ô UŸª UŸÿ  ¿Ô U¿ÿ UŸª U_U                         €€€ ª U ªU U?U €€€ U_U ª_ U ª €€€ U_U ªU ¤   ªU ª_U ª_U ªU U?U UŸª Uª  ßÔ Ußÿ  ¿Ô U¿Ô U?U                     €€€ €€€ ªŸ €€€ €€€ U_U U_U €€€ U_U ª U ÿ¿ª U_ ¤   ÿŸ ª_U ª_U ª_U ª_* U_U UŸª UŸÔ  ¿ÿ U¿Ô Ußÿ  ŸÔ U_U                 €€€ €€€ ªŸ ª ª €€€ ª U_U U_U U_U U €€€ ª¿Ô U_U ÿ ªŸ ªU ª_* ª_U ª_U U?U ªŸª UŸª ª¿Ô  ¿ÿ  ¿ÿ UßÔ U?U             U €€€ ÿŸ ªŸª ªŸ ªŸ ª €€€ €€€ €€€ ªŸª UŸÔ ª¿Ô ÿÿÿ U_ ªŸU ÿŸª ª_U ª_U ª_U ª_U U_U U¿ª  ŸÔ Ußÿ ªßÔ Ußÿ  ŸÔ U_U         €€€ ªŸ ªŸ ¤   ÿŸ ªŸ ¤   €€€ ªª UŸª Uª UŸª ªŸª UŸÔ ª¿Ô UU U?U U?U U_U U?U U_U U_* U?U U?U U_U U?U U_U  ?U U?U U_U         €€€ ÿŸª ª¿ ÿŸ ªŸ ÿŸª €€€ UŸª UŸª Uª U_ª  ?  ?U U?U ªŸÔ U_U UŸÔ UŸÿ  ª U?Ô  ?Ô ÿ  _U ª¿ª UU UŸU U¿ U¿ª U¿U U?U     €€€ ¤   ¤   ÿŸª ÿ¿ ¤   ¤   €€€ UŸÔ UÔ U? ÀÜÀ €€€ ªŸª ªª ÀÜÀ ª_U  ÿ UÔ U_Ô  ?ª U?Ô  ?ª U?U UŸU UŸU U¿ U¿ª U¿ UŸU U?U     €€€ ÿŸª ÀÜÀ ÿŸª ¤   ÿ¿ª €€€ UÔ UŸª U_ª  ? ÀÜÀ ÿ¿Ô UŸª ªŸª ÀÜÀ U_ UÔ UŸÔ  Ô U?Ô  _Ô Uª U_U ª¿ª  U U¿ U¿ª U¿ UŸ U_U ª ªŸª ÀÜÀ ðʦ ÀÜÀ ÿ¿ª ¤   Uª  Ô UÔ  _ª  ?U ÿÌÿ ÀÜÀ U_  ?U ¤   U_ UŸÔ  Ô U_Ô  ?Ô  ?Ô ªª U?U U¿ª UŸU UŸU U¿ª U¿ U¿ U?U €€€ ¤   ÿßÔ ÿ¿Ô ðʦ ÀÜÀ ªŸª  _ª UÔ  _Ô U_ª  ?U ÿßÔ ª¿Ô U_  ? ª¿Ô U_U UŸÔ UÔ  Ô U?ª U_Ô  ?Ô U_U €€€ UU U¿ U¿ U¿ª U¿ U_* €€€ ÀÜÀ ÿÿÿ ÿßÔ ÀÜÀ ÿßÿ €€€  _Ô  _ª U_ª  _ª   ÀÜÀ ª¿Ô U?U U_ª ª¿Ô ªŸª U_ U_U U_U U_ U_U U_U U_ U_U U_U U_ U_U U_U U_U ªŸª €€€ ÿÿÿ ÿßÔ ÀÜÀ ÿ¿Ô ÀÜÀ U_ª  _ª U_Ô  _ª U?ª  ?U ÿßÔ ¤    _  ? UÔ ªßÔ ª¿Ô ªŸÔ ÀÜÀ ÿßÿ ª¿Ô ªŸª ª¿Ô ªßÿ ÿÿÿ ÀÜÀ ÿ¿Ô ªŸª ªŸ ªŸª U ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿßÔ  ?ª U?ª  _ª  _ª  _ª UU ªßÿ ¤   U?U U_ª  _ª UÔ UÔ  €€ U_ª ÀÜÀ €€€ U?U UÔ U¿Ô ªŸÔ UŸª €€€ ªŸ ¤   €€€ ª ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÀÜÀ  _ª  ?ª U?ª  ?ª  ?ª  ?U ÿßÔ ª¿ª  ?  ? UÔ U_ª  Ô U? U_ ÀÜÀ ªŸª  ?U Uª ªŸÔ U¿Ô ªª €€€ ªŸ €€€ ªŸª U ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÀÜÀ U?  ?ª  _ª U_ª U_ª  U ÀÜÀ ªŸÔ U_U  ?ª U_ª  Ô U_ª  _ U_ª ÀÜÀ ªª  ? Uª UŸÔ UŸÔ €€€ €€€ €€€ ªª €€€ ª ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ  _ª U_  _ª Uª  ?  ? ÿßÔ ¤    ? U?  _ª  _Ô U_ª  ? €€€ ª¿Ô €€€ U?  ª UŸÔ UŸÿ €€€ U_U €€€ €€€ €€€ U ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ªŸª U_ª U_Ô ªŸÔ U_ª  U ÿßÔ ¤   U?  ?  _ª U_ª  ?ª  U ªÔ ÀÜÀ U  ?U UÔ UÔ €€€ U €€€ ªU €€€ €€€ €€€ ÿßÔ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÀÜÀ UŸª ÀÜÀ Uª U_ª  U ÀÜÀ ªŸª U?U   €  _ª  ?  ?U U_ ÀÜÀ ªŸÔ U?  ?ª Uª  Ô Uª U?U U_U U_ UU ª €€€ ÀÜÀ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÌÿ ª¿ª U_ª  ?  U ÿÌÿ ÀÜÀ  ?  U  U  U U_ª ÿ¿Ô ÀÜÀ €€€  ?U  _ª  Ô U_Ô €€€ €€€ U_U U_U ª_ UU €€€ €€€ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ UŸÔ Uª U_  U ÀÜÀ ÀÜÀ ªŸª €€€ Uª ÿ¿ª ª¿Ô ÀÜÀ ªª    ?ª U_ª  _ª Uª €€€ UU ª_U U_ €€€ €€€     €€€ ÀÜÀ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ª¿ª U_ª  ?  U ÿÿÿ ÿßÔ ÿÌÿ ÀÜÀ ÿßÔ ª¿Ô ªŸª U?  U  ? U_ª  _ª Uª €€€ ªŸ ª_ €€€ U_U €€€         €€€ €€€ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ªŸª  ?  ?U  U  U  U  U  U  U  U  ?  ?  ?ª  ?ª  _ª ªª ªŸ €€€ ªŸ ª €€€ UU             €€€ ¤   ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ªŸª U?  ?    ?U    ?U    ?  ?  ?ª  ?ª U_ ªŸª ªŸ ªŸ ªŸ €€€ ªŸ €€€                 €€€ €€€ ÿßÔ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÀÜÀ €€€  _ U?  ?  ?  ?  ? U?ª U_ €€€ ª¿Ô ÿŸ ªŸª ÿŸ ªŸª ª €€€ €€€                     €€€ €€€ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿßÿ ÀÜÀ ª¿ª ªŸª ¤   ªŸÔ ª¿ª ÀÜÀ ÀÜÀ ÿŸª ª¿ ÿŸ ªŸ ªŸ ªŸ €€€                             €€€ €€€ ÿßÔ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿßÔ ÀÜÀ ÿÌÿ ðʦ ðʦ ª¿ª ÿŸª ª¿ª ÿŸ €€€ €€€                                     €€€ €€€ ¤   ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿßÔ ÿßÔ ÀÜÀ ÿÌÌ ÿ¿ª ª¿ª ÿŸ €€€ €€€                                             €€€ €€€ €€€ ÀÜÀ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÀÜÀ ÿ¿Ô ÀÜÀ ÿ¿ª ªŸª €€€ €€€                                                         €€€ €€€ €€€ ¤   ÀÜÀ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÌÌ ÀÜÀ ¤   €€€ €€€                                                                         €€€ €€€ €€€ €€€ €€€ €€€ €€€ €€€ €€€ €€€ €€€ €€€                                         ÿÀ  ÿ   ü   ø   ð   à   À   À   €   €                                                   €  €  À  À  à  ð  ø  ü  ?ÿ  ÿÿÀÿ   0   ÿÿ M A I N I C O N         
                   ¨   R      ÿÿ ÿÿ     
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    type="win32"
    name="CodeGear RAD Studio"
    version="14.0.3513.24210" 
    processorArchitecture="*"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
        </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
Copiado con Bloc de notas, alguien me puede ayudar con este problema, ya intente varias cosas, pero no logro hacerlo.

De antemano muchas gracias por la ayuda.
Responder Con Cita
  #2  
Antiguo 07-08-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Tal vez te interese leer esto.

Saludos.
Responder Con Cita
  #3  
Antiguo 07-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por gersojn Ver Mensaje
Hola, les cuento que estoy haciendo una aplicacion la cual necesita permisos de administrador para que algunas funciones sirvan, como leer el nombre del procesador por medio de un Registry, etc.
Para leer el nombre del procesador no es necesario que tu aplicación tenga privilegios de administrador. Simplemente establece la propiedad ReadOnly de TRegistry a True y dicho componente no te producirá problemas al leer cualquier clave/valor del registro.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 08-08-2011
gersojn gersojn is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 85
Poder: 13
gersojn Va por buen camino
Hola, gracias por las respuestas

Bueno, veran tengo el siguiente codigo

Código Delphi [-]
function NombreProcesador:string;
var
Registro:TRegistry;
begin

  Result:='';
  Registro:= TRegistry.Create;
  try
    Registro.RootKey:= HKEY_LOCAL_MACHINE;
    if Registro.OpenKey('\Hardware\Description\System\CentralProcessor\0', True) then
     Result:= Registro.ReadString('ProcessorNameString');
  finally
  Registro.Free;
  end;
end;

No se como colocar el TRegistry a true, tampoco puedo colocarlo a Readonly.

En cuanto a compilar con brcc35 el archivo.RC, pues, lo compile todo bien, y me genero el archivo.RES (Nota: no se si habra problema con la extension, si sea necesario, archivo.res, ya que yo tengo archivo.RES) despues agrego
Código Delphi [-]
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, Registry;{$r win7.RES}

No me genera ningun tipo de error, solo unos warning
Código:
[DCC Warning] W1056 Warning: Duplicate resource:  Type 24 (user-defined), ID 1; File C:\Users\gersojn\Documents\RAD Studio\Projects\Tarea\Nombre_Procesador\Project1.res resource kept; file C:\Users\gersojn\Documents\RAD Studio\Projects\Tarea\Nombre_Procesador\win7.RES resource discarded.
Pero no me presenta el nombre del procesador, debo de integrar el RES al proyecto desde el Embarcadero, porque solo lo he agregado a la carpeta del proyecto , tambien hize una prueba agregandolo a Project -> Resources, pero tampoco.

Que puedo hacer al respecto? de antemano muchas, gracias.

Última edición por gersojn fecha: 08-08-2011 a las 00:21:25.
Responder Con Cita
  #5  
Antiguo 08-08-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
En Win7 es mas complicado ejecutar como administrador que usar un archivo de recursos.

Para tu caso la función puedes hacerla así:

Código Delphi [-]
function NombreProcesador:string;
var
Registro:TRegistry;
begin

  Result:='';
  Registro:= TRegistry.Create;
  Registro.Access:= KEY_READ;
  try
    Registro.RootKey:= HKEY_LOCAL_MACHINE;
    if Registro.OpenKey('\Hardware\Description\System\CentralProcessor\0', True) then
     Result:= Registro.ReadString('ProcessorNameString');
  finally
  Registro.Free;
  end;
end;

Saludos.
Responder Con Cita
  #6  
Antiguo 08-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Utiliza este código:
Código Delphi [-]
function NombreProcesador:string;
var
Registro:TRegistry;
begin

  Result:='';
  Registro:= TRegistry.Create;
  try
    Registro.ReadOnly := True; // esto es lo que te intente decir
    Registro.RootKey:= HKEY_LOCAL_MACHINE;
    if Registro.OpenKey('\Hardware\Description\System\CentralProcessor\0', True) then
     Result:= Registro.ReadString('ProcessorNameString');
  finally
  Registro.Free;
  end;
end;

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #7  
Antiguo 08-08-2011
gersojn gersojn is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 85
Poder: 13
gersojn Va por buen camino
Gracias

muchas gracias por las respuestas, ya funciona excelente el programa con la funcion anterior

Código Delphi [-]
function NombreProcesador:string; 
var 
  Registro:TRegistry; 
begin    
  Result:= '';   
  Registro:= TRegistry.Create;   
  Registro.Access:= KEY_READ;   
  try     
    Registro.RootKey:= HKEY_LOCAL_MACHINE;     
    if Registro.OpenKey('\Hardware\Description\System\CentralProcessor\0', True) then      
      Result:= Registro.ReadString('ProcessorNameString');   
   finally   
     Registro.Free;   
  end; 
end;

Muchas gracias por la ayuda.

Última edición por ecfisa fecha: 08-08-2011 a las 01:02:57. Razón: Corregir identación
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas de Privilegios en Delphi gersojn Varios 10 03-08-2011 19:30:06
Aplicación con privilegios de administrador vtorres Varios 8 07-11-2008 16:59:38
Que una aplicación system ejecute a otra con privilegios del usuario activo. l30 API de Windows 1 28-06-2008 18:46:26
Dar privilegios de Administrador a la Aplicación PoZi API de Windows 16 26-04-2006 20:17:52
Privilegios en interbase acrophet Conexión con bases de datos 1 09-02-2004 15:07:35


La franja horaria es GMT +2. Ahora son las 06:45:09.


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
Copyright 1996-2007 Club Delphi