Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Obligar ejecucion como Administrador de mi aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=72305)

aram2r 09-02-2011 17:45:44

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..

rgstuamigo 09-02-2011 18:37:36

A mi parece :rolleyes: 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...:)

Chris 09-02-2011 18:42:44

Tienes que incluir un recurso manifiesto del UAC en el ejecutable que indique que el EXE necesita de privilegios administrativos.

aram2r 10-02-2011 16:17:58

Cita:

Empezado por rgstuamigo (Mensaje 390472)
A mi parece :rolleyes: 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 (Mensaje 390474)
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>


Chris 10-02-2011 17:00:03

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

aram2r 10-02-2011 17:05:53

Cita:

Empezado por Chris (Mensaje 390584)
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 :o , voy a probar esto...gracias.

jhonalone 06-04-2011 21:02:35

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.


La franja horaria es GMT +2. Ahora son las 15:19:16.

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