Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-02-2011
aram2r aram2r is offline
Miembro
 
Registrado: ene 2004
Posts: 81
Poder: 21
aram2r Va por buen camino
Obligar ejecucion como Administrador de mi aplicacion

Hola compañeros, ¿saben alguna manera de forzar la ejecución de una aplicación en modo administrador? Para Windows 7, pero sin que el usuario final tenga que "ticar" esta opción en las propiedades del ejecutable. Mucha gracias por su atención. Utilizo Delphi 7.
Aunque sea lanzandola desde otro ejecutable con algún parametro "winexec(.....)" etc..
Responder Con Cita
  #2  
Antiguo 09-02-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Lightbulb

A mi parece que con la API CreateProcessAsUser o mejor con CreateProcessWithLogonW puedes lograr ese objetivo, por tanto te aconsejo que hagas una búsqueda con palabras clave como "CreateProcessAsUser" o "CreateProcessWithLogonW" y de seguro encontrarás bastante hilos(temas) que te ayudarán.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 09-02-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
Tienes que incluir un recurso manifiesto del UAC en el ejecutable que indique que el EXE necesita de privilegios administrativos.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 10-02-2011
aram2r aram2r is offline
Miembro
 
Registrado: ene 2004
Posts: 81
Poder: 21
aram2r Va por buen camino
Cita:
Empezado por rgstuamigo Ver Mensaje
A mi parece que con la API CreateProcessAsUser o mejor con CreateProcessWithLogonW puedes lograr ese objetivo, por tanto te aconsejo que hagas una búsqueda con palabras clave como "CreateProcessAsUser" o "CreateProcessWithLogonW" y de seguro encontrarás bastante hilos(temas) que te ayudarán.
Saludos...
Gracias pero creo que para lo que yo necesito va mas encaminada la respuesta de Chris.

Cita:
Empezado por Chris Ver Mensaje
Tienes que incluir un recurso manifiesto del UAC en el ejecutable que indique que el EXE necesita de privilegios administrativos.
Pero, ¿Como se incluye el Manifiesto UAC? he estado leyendo sobre el XNResourceEditor, pero no se si es necesario, la aplicación lleva un XPManifest incluido por el tema visual, pero no se si se puede modificar algún parametro de este o valdria simplemente con acompañar el exe por ejemplo "pepe.exe" con un archivo "pepe.manifest" con algo como lo siguiente...me podrias dar alguna indicación más. Gracias.

Código:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"
/>
</requestedPrivileges>
</security>
</trustInfo>
Responder Con Cita
  #5  
Antiguo 10-02-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
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
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #6  
Antiguo 10-02-2011
aram2r aram2r is offline
Miembro
 
Registrado: ene 2004
Posts: 81
Poder: 21
aram2r Va por buen camino
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
Muchas gracias, ya estaba con el Vista UAC Maker dando vueltas , voy a probar esto...gracias.
Responder Con Cita
  #7  
Antiguo 06-04-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Gracias por tu aportación Cris, pero a mí me hace falta un poco más de ayuda.
¿Podrías explcarme cómo puedo editar el recurso WindowsXP.Res? Y qué tengo que hacer más detalladamente. Soy muy novato.

He creado un recurso nuevo con el código que mandaste y con brcc32, pero, aunque no da error al complilarlo, al ejecutarlo da el error de: "No se puede iniciar... configuración es incorrecta....Reinstalar...." Esto en XP.

Si lo ejecuto en Vista dice: "Error al iniciar la aplicación; la configuración en paralelo no es correcta...."

Gracias de todos modos por tus aportaciones.
Un saludo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Como saber si mi aplicación ya está en ejecución. ajgomezlopez API de Windows 6 29-01-2010 23:24:06
Obligar ingreso de datos en varios DBEdits chino150 Varios 3 24-02-2009 05:49:27
Aplicación con privilegios de administrador vtorres Varios 8 07-11-2008 16:59:38
Dar privilegios de Administrador a la Aplicación PoZi API de Windows 16 26-04-2006 20:17:52
¿Como no permitir mas de 1 ejecucion de la misma aplicacion? Moises22 Varios 2 27-09-2005 13:47:19


La franja horaria es GMT +2. Ahora son las 14:35:53.


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